完全背包原理

简介: 笔记

完全背包


每件物品有无限多个


朴素算法

f[i][j]=max(f[i][j],f[i−1][j−k∗v[i]]+k∗w[i])与01背包类似

for (int i = 1;i <= n;++i) {
  for (int j = 0;j <= m;++j) {
    for (int k = 0;v[i] * k <= j;++k) {
      f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
    }
  }
}


优化做法


15.png


for (int i = 1;i <= n;++i) {
  for (int j = 0;j <= m;++j) {
    f[i][j] = f[i - 1][j];
    if(j >= v[i])f[i][j] = max(f[i][j],f[i][j -v[i]] + w[i]);
  }
}

优化成一维

在计算f[j]时 因为j−v[i]小于j所以此时的f[j−v[i]]被更新到了第i 维 与原式相符 所以j不需要从大到小枚举

for (int i = 1;i <= n;++i) {
  for (int j = v[i];j <= m;++j) {
    f[j] = max(f[j],f[j -v[i]] + w[i]);
  }
}

当优化到一维时,只有完全背包的体积是从小到大循环的

for 物品:

for 体积:

for 决策:


目录
相关文章
|
7天前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
15 0
|
7天前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
16 0
|
3月前
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
24 0
|
3月前
|
算法 Java
用Java实现01背包问题 用贪心算法
用Java实现01背包问题 用贪心算法
110 43
|
7月前
|
算法
贪心算法的思路和典型例题
贪心算法的思路和典型例题
|
8月前
|
人工智能 算法 决策智能
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
132 1
|
算法 搜索推荐
算法笔记(二)——快排,归并算法(做成模板题)
算法笔记(二)——快排,归并算法(做成模板题)
算法笔记(二)——快排,归并算法(做成模板题)
|
算法 C++
多重背包例题
多重背包例题
69 0