![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2103252830fe49fbf8644f3fb5668eae.png)
1、 确定子问题
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6fb53e80f7bc25e6cf8d28a4404f4230.png)
子问题为:当前容量为j(纵轴)时,在i(横轴)个物品中取物的最大价值
J=容量,i=物品数,v=最大价值
v为子问题!!!
2、 确认状态
每个物品都有两种状态,取或不取。还要保证取了的价值一定比不取高,因为我们的最终目标不是做选择,而是从中找最优解。
3、推出方程
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/26b714e0cb75203527c56bc91d2de253.png)
举例:
当物品数量为1时,背包容量大于物品重量,拿一定为最优解,否则不拿。
当物品数量为2时,取(判断取了之后,剩余的容量的最优解加上本身是否为最优),否则不取。
…
4、 确定边界
因为每一个行都依赖上一行所以,要么手动初始化第一行,要么将下标由1开始记录