C.牛妹的春游(二维费用的背包问题)

牛妹的春游

https://ac.nowcoder.com/acm/contest/6218/C

这是道二维费用的背包问题,可以像01背包一样优化掉第一维的决策,选或不选这个袋子,然后需要像01背包一样倒序循环体积,和01背包的优化一样。其次,这道题的难点是可以买多,只要买够就行,我们只需要对负数的体积取0就行,表示我们即使当前需要的饮料小于袋子中的饮料数量,我们依然可以购买,只要从0决策转移过来就行。
ps.写成类的形式的题目,可以更改参数名。

class Solution {
public:
    int dp[2000][2000];
    int minCost(int a, int b, vector<vector<int> >& p) {
        memset(dp, 0x3f, sizeof dp);
        dp[0][0] = 0;
        for (int i = 0; i < p.size(); ++i)
            for (int j = a; j >= 0; --j)
                for (int k = b; k >= 0; --k)
                {
                    dp[j][k] = min(dp[j][k], dp[max(j - p[i][0], 0)][max(k - p[i][1], 0)] + p[i][2]);
                }
        return dp[a][b];
    }
};
全部评论
棒棒
点赞 回复 分享
发布于 2020-07-10 16:30
写错了,不用加2倍的
点赞 回复 分享
发布于 2020-07-10 13:21
请问j和k从2倍容量开始,有什么讲究吗
点赞 回复 分享
发布于 2020-07-10 10:20

相关推荐

评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务