完全背包问题总结

1.什么是完全背包问题

完全背包问题是0-1背包问题的扩展,其区别在于:

0-1背包的物品每个只有一件,不能重复使用。

完全背包问题中:每个物品有无数件,可以重复操作。

2.解决完全背包问题的一般步骤

完全背包也是动态规划的一种典型例题,所以解决完全背包问题任然是动规五部曲。

其次,按照动态规划的一般步骤

  1. 明确dp数组及下标的含义。
  2. 确定递推公式,但是递推公式只是动态规划的一部分,而非全部
  3. dp数组初始化
  4. 确定遍历顺序:从前往后?从后往前?
  5. 打印dp数组, 用于debug验证等。

3.完全背包问题的遍历顺序

完全背包的遍历顺序如何确定:

  • 对于二维dp数组来说,先背包再物体;先物体再背包;仅仅是二维数组填充的顺序不同而已,一个按列填充,一个按行填充。但是初始化时,就不同了,可以使用一个物品重复填充不同空间的背包。
  • 对于一维滚动dp数组来说,因为是滚动的行数据,所以是按行顺序填充,所以是先物品再背包。

其次注意:传统的一维dp[]数组遍历时,背包总是倒序,放置物品重复放置。

但是在完全背包问题中,不存在不能重复放置的问题,所以,这里将背包遍历改为正序遍历过程即可。

具体的步骤,可以在题目里看到。

相关推荐
cynicme17 小时前
力扣3318——计算子数组的 x-sum I(偷懒版)
java·算法·leetcode
im_AMBER20 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
凯芸呢20 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
寂静山林20 小时前
UVa 1030 Image Is Everything
算法
AI柠檬20 小时前
几种排序算法的实现和性能比较
数据结构·算法·c#·排序算法
weixin_4296302621 小时前
第6章 支持向量机
算法·机器学习·支持向量机
SweetCode21 小时前
C++ 实现大数加法
开发语言·c++·算法
王哈哈^_^21 小时前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
CodeWizard~1 天前
AtCoder Beginner Contest 430赛后补题
c++·算法·图论
大大dxy大大1 天前
机器学习-KNN算法示例
人工智能·算法·机器学习