文章目录
- 基本思路步骤:
- (一)01背包总结
- (二)完全背包总结(除了遍历顺序和01背包完全相同)
- (三)01完全背包如何设置内层遍历顺序来避免背包小于商品的情况
基本思路步骤:
首先:把组合问题等都转化为选取子集问题,即转化为取或不取的01背包问题
1.确定dp数组的维度以及下标含义
2.确定递推公式(递推往回倒退的状态是一个选择序列)
3.dp数组初始化
4.确定遍历顺序
5.举例推导
(一)01背包总结
首先:转化问题为01背包,有的问题是组合问题,但是我们确定了dp[]含义之后就找一个取或不取的状态的背包转化为01背包问题,参考494. 目标和 链接
1.确定dp
a.有普通的一维背包那就一个含义记住就好
b.也有二维背包的含义一样只是是二维的,参考474.一和零 链接
2.确定递推01背包就取不取呗,要么两种状态相加,要么两种状态取最大最小
3.dp数组初始化
a.边界和定义吻合首先
b.其他非边界初始化,要考虑会不会影响递推的进行,会不会覆盖递推的结果,大概经验就是一般没有负值出现0是可以的一般,也就是不影响min()或者max()选择的初始化即可,可能是INT_MAX,也可能是INT_MIN,也可能是0