Total Submission(s): 6833 Accepted Submission(s): 4070
Each test case start with a positive integer N(1<=N<=1000) which indicate the number of homework.. Then 2 lines follow. The first line contains N integers that indicate the deadlines of the subjects, and the next line contains N integers that indicate the reduced scores.
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int str[1010]; //用来标记该天是否占用,刚開始都未使用标记0,用过则标记1。 struct st { int time,fen; }data[1010]; int cmp(st a,st b) //科目按扣分从高到低排序。假设扣分同样。则科目期限短的考前。 { if(a.fen!=b.fen) return a.fen>b.fen; else return a.time<b.time; } int main() { int i,j,T,n; scanf("%d",&T); while(T--) { memset(str,0,sizeof(str)); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&data[i].time); } for(i=0;i<n;i++) { scanf("%d",&data[i].fen); } sort(data,data+n,cmp); int sum=0; for(i=0;i<n;i++) { j=data[i].time; while(j) //将扣分多的科目优先放到期限的最后一天完毕。
{ if(!str[j]) //假设那天未被占用,占用那天。跳出while循环,再考虑扣分次多的那个科目。 { str[j]=1; break; } j--; // 假设那天已经被占用,考虑前一天是否被占用。 } if(j==0) sum+=data[i].fen; //假设在期限之内的全部天数均已经被占用。则不得不扣分。
} printf("%d\n",sum); } return 0; }