zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/dengeven/p/3230592.html
Copyright © 2011-2022 走看看