思路:
贪心法,将所有比赛按照扣钱数从大到小排序,然后遍历。
每次安排扣钱最多的比赛到刚好能完成比赛的时间段,这样能给前面匀出更多的时间安排其他的比赛。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int m,n,flag;
struct game{
int t;
int v;
}s[505];
bool cmp(game a,game b){
return a.v>b.v;
}
bool v[505];
int main(){
while(scanf("%d%d",&m,&n)!=EOF){
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++){
cin>>s[i].t;
}
for(int i=1;i<=n;i++){
cin>>s[i].v;
}
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++){
flag=0;
for(int j=s[i].t;j>0;j--){
if(v[j]==0){
v[j]=1;
flag=1;
break;
}
}
if(!flag){
m-=s[i].v;
}
}
cout<<m<<endl;
}
return 0;
}