本篇博客是看了卡哥的动态规划章节之后,总结了一下模板和一些问题,其实去年也写过01背包的文章,今年就当重新复习,更加深入的总结了一下,顺便带上用一维数组(滚动数组)去解决这个问题的思路和写法。之前的文章链接(动态规划)彻底搞懂0-1背包_
目录
本篇纯属方便自己日后回过头来看,要想详细了解的可以去看看卡哥的讲解。太顶了!
用二维数组的写法:
注意几个问题:
- dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。
- 初始化:最左侧一列初始化成0,因为背包容量是0你什么东西都放不进去,再者第一行的初始化,用第一个物品根据和背包的容量关系去初始化,初始化第一行就是因为i是由i-1推出来的所以就要初始化了,剩余位置初始化多少其实都可以,这里我们统一都初始化成1
- 递推公式: dp[i][j] = max(dp[i