440 · 背包问题(三)(无限次数)

链接:

题解:

dpij 表示前i个物品,凑出不超过j大小,获得最大的价值是多少

cpp 复制代码
class Solution {
public:
    /**
     * @param a: an integer array
     * @param v: an integer array
     * @param m: An integer
     * @return: an array
     */
    int backPackIII(vector<int> &a, vector<int> &v, int m) {
        // write your code here
        int len = a.size();
        if (len <= 0) {
            return 0;
        }
 vector<vector<int>> dp(len + 1, vector<int>(m + 1, 0));
// dp[0][j] = 0:没有物品,任何容量下价值都是 0

for (int i = 1; i <= len; ++i) {
    for (int j = 0; j <= m; ++j) {
        dp[i][j] = dp[i - 1][j];                     // 不选第 i 个
        if (j >= a[i - 1]) {
            dp[i][j] = max(dp[i][j],
                           dp[i][j - a[i - 1]] + v[i - 1]);  // 选第 i 个
        }
    }
}
return dp[len][m];   // ✅ 直接返回
    }
};

dpij前i个物品凑出j个大小的背包,获得的价值是多少

cpp 复制代码
class Solution {
public:
    /**
     * @param a: an integer array
     * @param v: an integer array
     * @param m: An integer
     * @return: an array
     */
    int backPackIII(vector<int> &a, vector<int> &v, int m) {
        // write your code here
        int len = a.size();
        if (len <= 0) {
            return 0;
        }
        vector<vector<int>> dp(len+1, vector<int>(m+1, INT_MIN));
        dp[0][0] = 0;
        for (int i = 1; i <= len; ++i) {
            for (int j = 0; j <= m; ++j) {
                dp[i][j] = dp[i-1][j];
                if (j - a[i-1] >= 0) {
                    dp[i][j] = max(dp[i][j], dp[i][j-a[i-1]] + v[i-1]);
                }
            }
        }
        int result = INT_MIN;
        for (int i = 0; i <= m; ++i) {
            result = max(result, dp[len][i]);
        }
        return result;
    }
};
相关推荐
suhan1 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
killerbasd2 小时前
总结 10.26
算法
深圳安锐科技有限公司2 小时前
从成像尺度到亚像素解算:变焦视觉位移监测如何让远近断面都稳
图像处理·人工智能·深度学习·算法·计算机视觉·系统架构·结构健康监测
一只旭宝2 小时前
回调函数(Callback)
linux·服务器·算法
秋名RG2 小时前
算法的划分
算法
Tisfy3 小时前
LeetCode 3619.总价值可以被 K 整除的岛屿数目:广度优先搜索BFS
算法·leetcode·bfs·宽度优先
地平线开发者3 小时前
【大模型】EAGLE 与 EAGLE-3:用“特征预测“加速投机解码
算法
lengxuenong3 小时前
区间覆盖问题 · 简明学习手册1
java·学习·算法
明志数科3 小时前
人类视频与机器人示教的数据配比:分层训练的数据采购与采集设计
人工智能·算法