梦之动态规划

来源:互联网 发布:淘宝视频编辑软件 编辑:程序博客网 时间:2024/03/29 07:33

题解

 

动态规划所处理的问题是一个多阶段决策问题

初始状态→│决策1│→│决策2│→→│决策n│→结束状态

动态规划可以看成形成一个决策序列,即上一步的决策影响当前一步的决策,但与下一步的决策无关。当最后一步的决策完成时,也就形成了这个决策序列,最后一步的决策也就是原问题的解。

 

 

No1:0-1背包问题

问题描述:1……n个物品,其质量为wii=1……n),其价值为pi。背包最多能容纳的重量为C,不限体积。物品只能全部放入或选择不放入,不能切割。现求解怎么样才能使背包装入的物品总价值最大。

问题分析:将对n个物品的决策按照一定的顺序进行,形成一串决策序列,即:首先考虑第一个物品1取与不取,再考虑第二个物品取与不取,因为前一个物品如果决策是选择的话,那么对于后一个物品的来说,背包的剩余容量是不一样的,而如果前一个物品不选,则对于后一个物品来说,背包的剩余容量不变。由此,可以看出决策序列的顺序性,当前决策受到前一个决策的影响。

 

参考答案:定义Myj)为当背包剩余容量为j,可选择的物品编号为 yn个物品时,所能产生的最大价值。

                原问题为M1C),表示背包为空,从1n号物品(即所有物品)可供选择时所能产生的最大价值。

 

递推式如下:

 

 

1-1

 

j>=wi(背包剩余容量比当前需要做决策的物品重量更大),则有两种情况:选与不选。

如果选择的话,那么背包剩余容量=之前背包剩余容量-放入背包的该物品的重量wi,背包的价值=之前背包里的价值+当前放入背包的物品的价值pi。当前决策完成之后,剩余可供选择的物品编号就要向前加1

即:Mi+1j-wi+pi

如果不选择的话,那么背包剩余容量不变,背包里的价值也不变,完成当前决策后,剩余可供选择物品编号也要加1

即:Mi+1j

因为这只是可供选择的两种决策方案,所以想要取得最大价值,当然得选择这两种决策影响下的方案所能产生的更大解。Max{ab}表示取ab两者中更大的一个为解。

 

j<wi ,则表示当前物品根本放不下去。那么也就不用抉择了,直接继续下一个物品的决策,把物品编号加1j不变。

M(i+1,j) 

 

最后也就是边界条件。当j<Wn时,Mnj=0;当j>Wn时,Mnj=Wn