HDU 1789

来源:互联网 发布:临沂四中官网通知 编辑:程序博客网 时间:2024/06/06 03:36
#include<iostream>#include<algorithm>using namespace std;struct N{int len;int work[1001];}day[1001];bool cmp(int a ,int b){return a>b;}int main(){int t,n,i,num[1001],temp[1001],sum,j,M_day;scanf("%d",&t);while(t--){sum=0;M_day=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&num[i]);//期限if(M_day<num[i]){M_day=num[i];//找到最大的期限}}for(i=1;i<=M_day;i++)//所有的长度清零{day[i].len=0;}for(i=0;i<n;i++){scanf("%d",&day[num[i]].work[day[num[i]].len]);//期限对应的任务sum+=day[num[i]].work[day[num[i]].len];day[num[i]].len++;}int t_len=0;for(i=1;i<=M_day;i++)//第几天{if(day[i].len==0) continue;//i天没有任务就继续for(j=0;j<day[i].len;j++){temp[t_len++]=day[i].work[j];}sort(temp,temp+t_len,cmp);//从大到小排序if(t_len>i)//取前i个任务(必须完成的任务),后面忽略{t_len=i;}}for(i=0;i<t_len;i++)//减去必须完成的任务,剩下就是答案{sum-=temp[i];}printf("%d\n",sum);}return 0;}


原创粉丝点击