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
  • 相关阅读:
    轻轻松松看懂Spring AOP源码
    centos7安装openjdk8
    使用fiddler做弱网测试
    测试术语-好东西要跟大家一块分享-2
    测试思想-好东西与大家分享-1
    session、token、cookie的区别
    接口测试和功能测试的区别
    常见bug解析-移动端
    接口测试的简介
    软件测试基本理论
  • 原文地址:https://www.cnblogs.com/dengeven/p/3230592.html
Copyright © 2011-2022 走看看