http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2076&cid=1159
示例输入
3 3 3 3 3 10 5 1 3 1 3 1 6 2 3 7 1 4 6 4 2 4 3 3 2 1 7 6 5 4
示例输出
0 3 5
这个题用贪心思路解题,做的时候最主要的是进行数组的标记,每份作业都只有一天写完,把分值从大到小排序,从最大的开始看是否有时间去做
1 #include<stdio.h> 2 #include<stdlib.h> 3 struct node 4 { 5 int u,v,w ; 6 }a[10001],b ; 7 int main() 8 { 9 int t ; 10 while(scanf("%d",&t)!=EOF) 11 { 12 for(int h = 1 ; h <= t ; h++) 13 { 14 int n ; 15 int i , j; 16 int m ; 17 int score ; 18 scanf("%d",&n); 19 for(i = 0 ; i <= n-1 ; i++) 20 scanf("%d",&a[i].u); 21 for(j = 0 ; j < n ; j++) 22 { 23 scanf("%d",&a[j].v); 24 a[j].w = 0 ; 25 } 26 for(i = 0 ; i <= n-2 ; i++) 27 { 28 for(j = 0 ; j <= n-2-i ; j++) 29 { 30 if(a[j].v < a[j+1].v) 31 { 32 b = a[j] ; 33 a[j] = a[j+1] ; 34 a[j+1] = b ; 35 } 36 } 37 } 38 int sum = 0 ; 39 40 for(i = 0 ; i <= n-1 ; i++) 41 { 42 score = a[i].u ; 43 m = 0 ; 44 int l ; 45 for(l = score-1 ; l >= 0 ; l--) 46 { 47 if(a[l].w == 0) 48 { 49 a[l].w = 1 ; 50 m = 1 ; 51 break ; 52 } 53 } 54 if(m == 0) 55 sum = sum+a[i].v ; 56 } 57 printf("%d\n",sum) ; 58 } 59 } 60 return 0 ; 61 }