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 }

你可能感兴趣的:(home)