动态规划 完全背包问题 携带研究材料

携带研究材料

[携带研究材料]https://kamacoder.com/problempage.php?pid=1052)

学习记录自代码随想录

要点:1.完全背包问题中物品可以选无数次,所以相比于01背包问题,在遍历背包容量时需要正向遍历

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

class Solution{
public:
    int max_value(vector<int>& weight, vector<int>& value, int n, int v){
        
        // 1.dp[j]代表背包容量为j时的最大价值为dp[j]
        vector<int> dp(v+1, 0);
        
        // 2.递推公式:dp[j] = max(dp[j], dp[j-weight[i]] + value[i])
        // 3.初始化为0同01背包
        // 4.遍历顺序因为物品可以选无数次,所以内层遍历背包容量时正向遍历
        for(int i = 0; i < n; i++){
            for(int j = weight[i]; j < v+1; j++){
                dp[j] = max(dp[j], dp[j-weight[i]] + value[i]);
            }
        }
        // 5.举例推导dp数组
        return dp[v];
    }
};

int main(){
    
    int N, V;
    cin >> N >> V;
    vector<int> weight(N);
    vector<int> value(N);
    
    for(int i = 0; i < N; i++){
        int wei, val;
        cin >> wei >> val;
        weight[i] = wei;
        value[i] = val;
    }
    
    Solution Solution;
    int result = Solution.max_value(weight, value, N, V);
    cout << result;
    return 0;
}
相关推荐
bbppooi3 分钟前
堆的实现(完全注释版本)
c语言·数据结构·算法·排序算法
FFDUST10 分钟前
C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)
c语言·c++·算法·leetcode
m0_7380545626 分钟前
【leetcode】全排列 回溯法
c++·算法·leetcode·回溯法
ZZZ_O^O37 分钟前
【贪心算法第五弹——300.最长递增子序列】
c++·学习·算法·leetcode·贪心算法
呼啦啦啦啦啦啦啦啦41 分钟前
刷题日常(移动零,盛最多水的容器,三数之和,无重复字符的最长子串)
算法·双指针·滑动窗口
Koishi_TvT42 分钟前
蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)
c语言·c++·算法·性能优化·蓝桥杯·动态规划·c
孤独且没人爱的纸鹤43 分钟前
C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例
c语言·数据结构·c++·算法
YuanLiu_2271 小时前
代码随想录算法训练营第十三天(递归遍历;迭代遍历;统一迭代;层序遍历)
java·数据结构·笔记·算法·leetcode
闻缺陷则喜何志丹1 小时前
【C++动态规划】1411. 给 N x 3 网格图涂色的方案数|1844
c++·算法·动态规划·力扣·网格·数目·涂色
仙俊红2 小时前
快速运行openMMOCR
深度学习·算法