• 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;
    }
  • 相关阅读:
    DB开发之oracle存储过程
    DB开发之mysql
    DB开发之oracle
    DB开发之postgresql
    Object-C开发之instancetype和id关键字
    Linux 学习笔记
    Java开发之JDK配置
    Android开发在路上:少去踩坑,多走捷径
    C/C++之Qt正则表达式
    Linux 安全配置指南
  • 原文地址:https://www.cnblogs.com/dowson/p/3259793.html
Copyright © 2020-2023  润新知