背包问题就是用有限的资源(即背包容量)去挑选物品。如果物品只有一个,那就是01背包
01背包
我们可以画一个表格,横轴代表背包容量,纵轴代表第几个物品。当背包容量为7,有4个物品, 分别需要耗费1、4、2、5的背包容量,价值分别为2、3、4、5,则如下表:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 背包容量 | |
1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |
2 | 2 | 2 | 2 | 2 | 5 | 5 | 5 | |
3 | 2 | 2 | 6 | 6 | 6 | 6 | 9 | |
4 | 2 | 2 | 6 | 6 | 6 | 7 | 9 | |
物品序号 |
诺将这个表放进一个叫dp的数组里,则可获得状态转移方程:
(设x为当前所耗容量,y为当前的价值)
我们可以将其放入一个一维数组里,只有倒叙遍历即可,最后答案就是dp[m][n]