二维费用背包

问题描述:

解法:

其实只需要在 01背包 的基础上再增加一个纬度代表重量就可以了

因为是在 01背包 的基础上,所以更新的话我们和 01背包一样从大往小更新

int dp[1010][1010];

int main() {
    int n,m,v;
    std::cin >> n >> v >> m;
    for (int i = 1;i <= n;i++) {
        int a,b,c;
        std::cin >> a >> b >> c;
        for (int j = v;j >= a;j--) {
            for (int k = b;k <= m;k++) {
                dp[j][k] = std::max(dp[j][k],dp[j-a][k-b]+c);
            }
        }
    }
    std::cout << dp[v][m] << std::endl;
    return 0;
}
原文地址:https://www.cnblogs.com/-Ackerman/p/12250593.html