hdu 1789 贪心

画一个图分析一下就清楚啦,应该优先考虑完成损失最大的作业,因为一天只能完成一门作业,而同时应该倒着从deadline往回找合适的完成时间,因为这样对于别的作业来说,它们有更多的机会被完成。另外,deadline的数据范围也是1000以内。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 const int N = 1007;
 8 bool visit[N];
 9 
10 struct Node 
11 {
12     int d, s;
13     bool operator < ( const Node & o ) const 
14     {
15         return s > o.s;
16     }
17 } node[N];
18 
19 int main ()
20 {
21     int t;
22     scanf("%d", &t);
23     while ( t-- )
24     {
25         int n, sum = 0;
26         scanf("%d", &n);
27         for ( int i = 0; i < n; i++ ) 
28         {
29             scanf("%d", &node[i].d);
30         }
31         for ( int i = 0; i < n; i++ ) 
32         {
33             scanf("%d", &node[i].s);
34             sum += node[i].s;
35         }
36         sort( node, node + n );
37         memset( visit, 0, sizeof(visit) );
38         for ( int i = 0; i < n; i++ )
39         {
40             for ( int j = node[i].d; j > 0; j-- )
41             {
42                 if ( !visit[j] )
43                 {
44                     visit[j] = 1;
45                     sum -= node[i].s;
46                     break;
47                 }
48             }
49         }
50         printf("%d
", sum);
51     }
52     return 0;
53 }
原文地址:https://www.cnblogs.com/huoxiayu/p/4693047.html