poj 1789 Doing Homework again

思路:找到当前所给延时最长的所包含的作业里面分数最大的完成它,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 }
posted on 2012-09-02 14:55  BFP  阅读(222)  评论(0编辑  收藏  举报