题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789
每一门作业只需要一天就能完成。
同样的根据价值递减排序,先满足价值高的先做,日期尽可能靠后。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct node{
int s,r;
}a[1005];
bool cmp(node n1,node n2){
return n1.r>n2.r;
}
int test,n;
int main(){
scanf("%d",&test);
while(test--){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i].s);
for(int i=0;i<n;i++)
scanf("%d",&a[i].r);
sort(a,a+n,cmp);
int ans=0;
bool flag[1005];
memset(flag,false,sizeof(flag));
for(int i=0;i<n;i++){
int j;
for(j=a[i].s;j>=1;j--){
if(flag[j]==false){
flag[j]=true;
break;
}
}
if(j==0)
ans+=a[i].r;
}
printf("%d\n",ans);
}
}