zoukankan      html  css  js  c++  java
  • 1036Gangsters

    这个答案解决了我的一个疑惑,作为背包问题,f[i]表示是能与不能,但做到这个还不够,我们还要找到最好的一个,也就是说实现与找到的分开

    //////////////////////////////////////////////////////////////////////////
    //        POJ1036  Gangsters
    //        Memory: 284K        Time: 0MS
    //        Language: C++        Result: Accepted
    //////////////////////////////////////////////////////////////////////////
    
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    struct Ganster {
        int t;
        int p;
        int s;
    };
    Ganster g[101];
    int N, K, T;
    int dp[101];
    int ans = 0;
    bool visited[101];
    inline bool operator<(const Ganster & p1, const Ganster & p2) {
        return p1.t == p2.t ? (p1.s == p2.s ? p1.p < p2.p : p1.s < p2.s) : p1.t < p2.t;
    }
    int main() {
        cin >> N >> K >> T;
        for (int i = 1; i <= N; ++i) {
            cin >> g[i].t;
        }
        for (int i = 1; i <= N; ++i) {
            cin >> g[i].p;
        }
        for (int i = 1; i <= N; ++i) {
            cin >> g[i].s;
        }
        sort(g, g + N + 1);
        g[0].t =g[0].p = g[0].s = 0;
        visited[0] = true;
        for (int i = 1; i <= N; ++i) {
            for (int j = 0; j < i; ++j) {
                if (visited[j]) {
                    if (g[i].t - g[j].t >= abs(g[i].s - g[j].s)) {
                        dp[i] = max(dp[i], dp[j] + g[i].p);//更新放i进去能获得的最大财产
                    }
                }
            }
            visited[i] = (bool)dp[i];
            ans = max(ans, dp[i]);
        }
        cout << ans << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    我回来了
    wget 官方jdk
    linux rpm命令安装卸载 初步使用
    关于一些对location认识的误区(转)
    直接插入排序
    冒泡排序
    Wireshark下TCP三次握手四次挥手
    linux内存使用率详解
    Linux下硬盘使用率详解及shell脚本实现
    Linux下CPU使用率详解
  • 原文地址:https://www.cnblogs.com/dowson/p/3259793.html
Copyright © 2011-2022 走看看