- 一本通链接在此
- 依旧是一本通蓝书模板题
- 这道题还是很好想的,具体如下:
- 先把所有任务按照罚款金额排序(大的在前),然后从头开始处理。
- 每个任务应该安排在最靠后的能完成的时段,当然,一定会有完成不了的,在这个时候就直接减去罚款即可。
代码
#include<bits/stdc++.h>
using namespace std;
struct cyy{
int t,w;
}a[510];
bool cmp(cyy x,cyy y){
return x.w>y.w;
}
int m,n,s;
bool f[510],flag;
int main()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i].t);
for(int i=1;i<=n;i++)
scanf("%d",&a[i].w);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
flag=1;
for(int j=a[i].t;j>=1;j--)
if(!f[j]){
f[j]=1,flag=0;
break;
}
if(flag)
m-=a[i].w;
}
printf("%d\n",m);
return 0;
}