完全背包问题总结

1.什么是完全背包问题

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
闻缺陷则喜何志丹几秒前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
leihefeng31 分钟前
手写数字识别:KNN vs 逻辑回归实战
python·算法·机器学习·逻辑回归·scikit-learn
全栈技术负责人1 小时前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
mmmmath_31 小时前
面试题 02.07. 链表相交
算法·链表
residual_fan2 小时前
特征级SMOTE(Feature-level SMOTE)论文分享
人工智能·算法·数据挖掘·数据分析
xxwxx__2 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
sylviiiiiia2 小时前
Leetcode hot100 多数元素/相交链表/反转链表
算法·leetcode·链表
CoderYanger2 小时前
A.每日一题:3622. 判断整除性
java·程序人生·算法·leetcode·面试·职场和发展·蓝桥杯
rannn_1112 小时前
【力扣hot100】动态规划专题|70、118、198、279、322、139、300、152、416、32
算法·leetcode·动态规划
渡之2 小时前
ArduPilot(APM)滤波器之 HarmonicNotchFilter 深度解析
算法·无人机