首页 > 其他 > 详细

二维费用背包

时间:2020-02-01 23:30:36      阅读:89      评论:0      收藏:0      [点我收藏+]

问题描述:技术分享图片

 

 

 

解法:

其实只需要在 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!