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

 

posted on 2013-06-05 00:58  枫、  阅读(154)  评论(0编辑  收藏  举报