SDUT2076Doing Homework again

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 }
View Code

 

你可能感兴趣的:(home)