1 条题解

  • 0
    @ 2024-11-26 14:48:43

    完全背包

    fkf_k 表示当前花费不超过 kk 个金币能获得的最大额外价值。

    对于第 ii 天的第 jj 件物品:

    • 不买:fkf_k
    • 买了第二天卖出:fkpi,j+pi+1,jpi,jf_{k-p_{i,j}} +p_{i+1,j}-p_{i,j}
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 105, M = 1e4 + 5;
    const int INF = 0x3f3f3f3f, MOD = 1E9 + 7;
    int t, n, m, p[N][N], f[M];
    
    int main(int argc, char* argv[]) {
        cin >> t >> n >> m;
        for (int i = 1; i <= t; i++)
            for (int j = 1; j <= n; j++)
                cin >> p[i][j];
    
        for (int i = 1; i < t; i++) {
            memset(f, 0x00, sizeof f);
            for (int j = 1; j <= n; j++)
                for (int k = p[i][j]; k <= m; k++)
                    f[k] = max(f[k], f[k - p[i][j]] + p[i + 1][j] - p[i][j]);
            m += f[m];
        }
        cout << m;
        return 0;
    }
    
    • 1

    信息

    ID
    939
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    129
    已通过
    69
    上传者