题解
动态规划所处理的问题是一个多阶段决策问题
初始状态→│决策1│→│决策2│→…→│决策n│→结束状态
动态规划可以看成形成一个决策序列,即上一步的决策影响当前一步的决策,但与下一步的决策无关。当最后一步的决策完成时,也就形成了这个决策序列,最后一步的决策也就是原问题的解。
No1:0-1背包问题
问题描述:1……n个物品,其质量为wi(i=1……n),其价值为pi。背包最多能容纳的重量为C,不限体积。物品只能全部放入或选择不放入,不能切割。现求解怎么样才能使背包装入的物品总价值最大。
问题分析:将对n个物品的决策按照一定的顺序进行,形成一串决策序列,即:首先考虑第一个物品1取与不取,再考虑第二个物品取与不取,因为前一个物品如果决策是选择的话,那么对于后一个物品的来说,背包的剩余容量是不一样的,而如果前一个物品不选,则对于后一个物品来说,背包的剩余容量不变。由此,可以看出决策序列的顺序性,当前决策受到前一个决策的影响。
参考答案:定义M(y,j)为当背包剩余容量为j,可选择的物品编号为 y到n个物品时,所能产生的最大价值。
原问题为M(1,C),表示背包为空,从1到n号物品(即所有物品)可供选择时所能产生的最大价值。
递推式如下:
图1-1
当j>=wi(背包剩余容量比当前需要做决策的物品重量更大),则有两种情况:选与不选。
如果选择的话,那么背包剩余容量=之前背包剩余容量-放入背包的该物品的重量wi,背包的价值=之前背包里的价值+当前放入背包的物品的价值pi。当前决策完成之后,剩余可供选择的物品编号就要向前加1。
即:M(i+1,j-wi)+pi ;
如果不选择的话,那么背包剩余容量不变,背包里的价值也不变,完成当前决策后,剩余可供选择物品编号也要加1。
即:M(i+1,j)
因为这只是可供选择的两种决策方案,所以想要取得最大价值,当然得选择这两种决策影响下的方案所能产生的更大解。Max{a,b}表示取a和b两者中更大的一个为解。
当j<wi ,则表示当前物品根本放不下去。那么也就不用抉择了,直接继续下一个物品的决策,把物品编号加1,j不变。
M(i+1,j)
最后也就是边界条件。当j<Wn时,M(n,j)=0;当j>Wn时,M(n,j)=Wn。