概述
大致分为以下几类:
- 01背包
- 完全背包
- 混合背包
- 二维背包
- 分组背包
以及一个变式:跳楼梯模型,本质是转移顺序的改变。
01 背包
特点:无序加入,每个物品加一次。
完全背包
特点:无序加入,每个物品无限加。
变式:跳楼梯模型:问跳完一段楼梯有多少种不同的方案数。
这两者的区别就在于:
- 跳楼梯模型仅限于求方案数,而完全背包既可以求方案数,也可以求最优解。
- 跳楼梯模型强调有序 ,即要考虑谁先放谁后放;而完全背包强调无序,两个物品先放后放不会影响最终答案。
- 转移顺序不同。
第三点的区别最主要体现在代码上:
完全背包是外层先循环物品种类,然后循环背包容量。这样就可以通过人为地定一个放的顺序来达到无序的效果。
跳楼梯模型是外层先循环背包容量,然后循环物体种类。这样就可以使后放的情况包含先放的情况。
具体区别可以看这两个题,很明显: