代码如下:
#include"stdio.h" #include"string.h" #include"stdlib.h" int flag[1005]; struct node { int date,score; }x[1005]; int cmp(const void *a,const void *b) { node *aa=(node*)a,*bb=(node*)b; if(aa->score!=bb->score) return bb->score-aa->score; else return aa->date-bb->date; } int main( ) { int t,n,i,j,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&x[i].date); for(i=0;i<n;i++) scanf("%d",&x[i].score); qsort(x,n,sizeof(node),cmp);//先按扣分权重排序,然后按日期排; memset(flag,0,sizeof(flag)); sum=0; for(i=0;i<n;i++) { for(j=x[i].date;j>0;j--) { if(flag[j]==0) {flag[j]=1;break;}//从最后的期限开始考虑前几天有没有被安排 } //如果一直到结束都没有空余时间,最后只能扣分 if(j==0) sum+=x[i].score; } printf("%d\n",sum); } return 0; }