思路:找到当前所给延时最长的所包含的作业里面分数最大的完成它,eg:
7 1 4 6 4 2 4 3 3 2 1 7 6 5 4
当我在第7天的时候,没有延时 >=7 的,所以没有满嘴条件的,当在第6天的时候, 只可能完成一个作业就是1,完成它。第5天的时候可以完成延时为6的那个作业,
但是第六天已经完成了,所以没有满足要求的,第四天的时候有四个满足要求的,一个延时为 6 三个延时为 4, 找到分数最大的以此类推即可:
1 #include<stdio.h> 2 #include<string.h> 3 4 int t, n, dl[1100], sc[1100]; 5 int main() 6 { 7 while(~scanf("%d",&t)) 8 while(t --) 9 { 10 memset(dl, 0, sizeof(dl)); 11 memset(sc, 0, sizeof(sc)); 12 int sum = 0; 13 scanf("%d",&n); 14 for(int i = 0; i < n; i ++) 15 scanf("%d",&dl[i]); 16 for(int i = 0; i < n; i ++) 17 { 18 scanf("%d",&sc[i]); 19 sum += sc[i]; 20 } 21 int sum1 = 0, flag = n; 22 for(int i = n; i > 0; i --) 23 { 24 int max = 0; 25 for(int j = 0; j < n; j ++) 26 { 27 if(dl[j] >= i && max < sc[j]) 28 { 29 max = sc[j]; 30 flag = j; 31 } 32 } 33 sum1 += max; 34 sc[flag] = 0; 35 } 36 printf("%d\n",sum-sum1); 37 } 38 return 0; 39 }