完全背包原理

简介: 笔记

完全背包


每件物品有无限多个


朴素算法

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


目录
相关文章
|
6月前
|
算法 JavaScript
class074 背包dp-分组背包、完全背包【算法】
class074 背包dp-分组背包、完全背包【算法】
50 0
|
1月前
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
101 0
|
6月前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
45 0
|
6月前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
46 0
|
6月前
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
代码随想录 Day35 动态规划04 01背包问题和完全背包问题 LeetCode T416 分割等和子集
44 0
|
算法 Java 决策智能
0-1背包问题:动态规划的经典应用
0-1背包问题:动态规划的经典应用
326 0
|
算法 C++
|
人工智能 算法