(如有错误,恳请斧正)
递推式如下:
vi是第i件物品的价值,wi是第i件物品的所占空间。
m(i,j) 代表的含义是:目前只考虑第1到第i件物品放入总容量为j的背包所获得的最大价值。(背包总容量不可变并且千万不要误认为j是背包的剩余容量,第1到第i件物品都可以选择放或者不放入背包)。
现在我们考虑把第i件物品放入背包的决策方法:
①如果背包的总容量j小于第i件物品的所占空间,那么即使把背包里原来已经装入的所有东西都倒出来也放不进第i件物品,故此时所能获得的最大价值与只考虑第1到第i-1件物品放入总容量为j的背包所获得的最大价值相同。(第i件物品考虑了个寂寞~)
②如果背包的总容量j大于等于第i件物品的所占空间,此时有两种策略,一是不把第i件物品放入背包中,所以这种情况获得的最大价值与m(i-1,j) 相同。二是把第i件物品放进背包,若进行这种策略,那么总容量为j的背包必须分配wi的空间给第i件物品,相当于第1到第i-1物品是只能放在总容量为j-wi的背包中,这种策略获得的价值就是m(i-1,j-wi)+vi。综上,第②种情况就要在m(i-1,j)与m(i-1,j-wi)+vi中选个价值大的。
对于0-1背包填表的问题,就是按照上述思路从上到下,从左至右依次完成。例如
图转载于【动态规划】01背包问题(通俗易懂,超基础讲解)_Yngz_Miao的博客-优快云博客_01背包
表格第i行,就是背包总容量在0~8变化时,只考虑放入第1到第i件物品所获得的最大价值。