完全背包原理

简介: 笔记

完全背包


每件物品有无限多个


朴素算法

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 决策:


目录
相关文章
|
5月前
|
算法 Java 决策智能
Java数据结构与算法:动态规划之背包问题
Java数据结构与算法:动态规划之背包问题
|
6月前
|
算法 Java
用Java实现01背包问题 用贪心算法
用Java实现01背包问题 用贪心算法
145 43
|
6月前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
45 0
|
6月前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
41 0
|
6月前
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
44 0
|
算法 C++
|
人工智能 算法
|
算法
分组背包问题与背包问题求具体方案(一)
AcWing算法提高课内容,本文讲解 动态规划
191 0
分组背包问题与背包问题求具体方案(一)