POJ1036 Gangsters

题目来源:http://poj.org/problem?id=1036

题目大意:

  有N个强盗要进入一家饭店打劫,第i个强盗在Ti时刻到达,会抢到Pi的财产。饭店的门有K+1状态,门打开的程度为[0,K]。0表示门完全关闭。每过一个单位时间,门可以打开或合上一个单位,或保持不变。初始时刻店门紧闭。第i个强盗只能在门打开的状态为Si时才能进入饭店,Si表示第i个强盗的体型。如果强盗到达饭店时,他不能进入饭店,他将离开不再回来。饭店的营业时间是[0,T]。程序的目标是控制门的开关,使强盗可以获得最多的财产。

输入:第一行3个整数N、K、T(1<=N<=100, 1<=K<=100, 0<=T<=30000)

     第二行表示每个强盗到达时间T1,...TN,第三行表示每个强盗能获得的财产P1,...PN,第四号表示每个强盗的体型S1,..SN

输出:强盗能获得的最大财产数。


Sample Input

4 10 20
10 16 8 16
10 11 15 1
10 7 1 8

Sample Output

26

一维动态规划的方法:

 1 //////////////////////////////////////////////////////////////////////////
 2 //        POJ1036  Gangsters
 3 //        Memory: 284K        Time: 0MS
 4 //        Language: C++        Result: Accepted
 5 //////////////////////////////////////////////////////////////////////////
 6 
 7 #include <iostream>
 8 #include <algorithm>
 9 
10 using namespace std;
11 
12 struct Ganster {
13     int t;
14     int p;
15     int s;
16 };
17 Ganster g[101];
18 int N, K, T;
19 int dp[101];
20 int ans = 0;
21 bool visited[101];
22 inline bool operator<(const Ganster & p1, const Ganster & p2) {
23     return p1.t == p2.t ? (p1.s == p2.s ? p1.p < p2.p : p1.s < p2.s) : p1.t < p2.t;
24 }
25 int main() {
26     cin >> N >> K >> T;
27     for (int i = 1; i <= N; ++i) {
28         cin >> g[i].t;
29     }
30     for (int i = 1; i <= N; ++i) {
31         cin >> g[i].p;
32     }
33     for (int i = 1; i <= N; ++i) {
34         cin >> g[i].s;
35     }
36     sort(g, g + N + 1);
37     g[0].t =g[0].p = g[0].s = 0;
38     visited[0] = true;
39     for (int i = 1; i <= N; ++i) {
40         for (int j = 0; j < i; ++j) {
41             if (visited[j]) {
42                 if (g[i].t - g[j].t >= abs(g[i].s - g[j].s)) {
43                     dp[i] = max(dp[i], dp[j] + g[i].p);//更新放i进去能获得的最大财产
44                 }
45             }
46         }
47         visited[i] = (bool)dp[i];
48         ans = max(ans, dp[i]);
49     }
50     cout << ans << endl;
51     system("pause");
52     return 0;
53 }
View Code
posted @ 2013-08-01 17:43  小菜刷题史  阅读(331)  评论(0编辑  收藏  举报