【HDOJ】1789 Doing Homework again

其实也不是DP啊,贪心策略就决绝了。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 #define MAXNUM 1005
 6 
 7 typedef struct {
 8     int dead, reduce;
 9 } work_st;
10 
11 work_st works[MAXNUM];
12 char visit[MAXNUM];
13 
14 int comp(const void *a, const void *b) {
15     work_st *p = (work_st *)a;
16     work_st *q = (work_st *)b;
17     if (p->reduce == q->reduce)
18         return p->dead>q->dead ? 1:-1;
19     else
20         return p->reduce>q->reduce ? -1:1;
21 }
22 
23 int main() {
24     int case_n, n, reduce;
25     int i, j, k, dead;
26 
27     scanf("%d", &case_n);
28 
29     while (case_n--) {
30         scanf("%d", &n);
31         for (i=0; i<n; ++i)
32             scanf("%d", &works[i].dead);
33         for (i=0; i<n; ++i)
34             scanf("%d", &works[i].reduce);
35         qsort(works, n, sizeof(work_st), comp);
36         memset(visit, 0, sizeof(visit));
37         reduce = 0;
38         k = n;
39         for (i=0; i<n; ++i) {
40             dead = works[i].dead;
41             for (j=dead; j>0; --j)
42                 if ( !visit[j] )
43                     break;
44             if (j) {
45                 visit[j] = 1;
46             } else {
47                 for (j=k; j>0; --j)
48                     if ( !visit[j] )
49                         break;
50                 visit[j] = 1;
51                 k = j;
52                 reduce += works[i].reduce;
53             }
54         }
55         printf("%d\n", reduce);
56     }
57 
58     return 0;
59 }

 

posted on 2014-04-17 16:33  Bombe  阅读(119)  评论(0)    收藏  举报

导航