1.什么是完全背包问题
完全背包问题是0-1背包问题的扩展,其区别在于:
0-1背包的物品每个只有一件,不能重复使用。
而完全背包问题中:每个物品有无数件,可以重复操作。
2.解决完全背包问题的一般步骤
完全背包也是动态规划的一种典型例题,所以解决完全背包问题任然是动规五部曲。
其次,按照动态规划的一般步骤:
- 明确dp数组及下标的含义。
- 确定递推公式,但是递推公式只是动态规划的一部分,而非全部
- dp数组初始化
- 确定遍历顺序:从前往后?从后往前?
- 打印dp数组, 用于debug验证等。
3.完全背包问题的遍历顺序
完全背包的遍历顺序如何确定:
- 对于二维dp数组来说,先背包再物体;先物体再背包;仅仅是二维数组填充的顺序不同而已,一个按列填充,一个按行填充。但是初始化时,就不同了,可以使用一个物品重复填充不同空间的背包。
- 对于一维滚动dp数组来说,因为是滚动的行数据,所以是按行顺序填充,所以是先物品再背包。
其次注意:传统的一维dp[]数组遍历时,背包总是倒序,放置物品重复放置。
但是在完全背包问题中,不存在不能重复放置的问题,所以,这里将背包遍历改为正序遍历过程即可。
具体的步骤,可以在题目里看到。