全球旧事资料 分类
01背包问题动态规划详解及C代码背包问题动态规划详动态规划
动态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。
比如01背包问题。一个旅行者有一个最多能用M公斤的背包,现在有N件物品,它们的重量分别是W1,W2,W
它们的价值分别为P1P2P
若每种物品只有一件求旅行者能获得最大总价值。输入格式:MNW1P1W2P2输出格式:X因为背包最大容量M未知。所以,我们的程序要从1到M一个一个的试。比如,开始任选N件物品的一个。看对应M的背包,能不能放进去,如果能放进去,并且还有多的空间,则,多出来的空间里能放N1物品中的最大价值。怎么能保证总选择是最大价值呢?看下表。测试数据:103344556
cij数组保存了123号物品依次选择后的最大价值
f这个最大价值是怎么得来的呢从背包容量为0开始1号物品先试012的容量都不能放所以置0背包容量为3则里面放4这样这一排背包容量为45610的时候,最佳方案都是放4假如1号物品放入背包则再看2号物品当背包容量为3的时候,最佳方案还是上一排的最价方案c为4而背包容量为5的时候,则最佳方案为自己的重量5背包容量为7的时候,很显然是5加上一个值了。加谁很显然是743的时候上一排c3的最佳方案是4所以。总的最佳方案是54为9这样一排一排推下去。最右下放的数据就是最大的价值了。注意第3排的背包容量为7的时候最佳方案不是本身的6而是上一排的9说明这时候3号物品没有被选选的是12号物品所以得9从以上最大价值的构造过程中可以看出。f
mmaxf
1mf
1mw
P
m这就是书本上写的动态规划方程这回清楚了吗
下面是实际程序(环境下通过)下面是实际程序(在VC60环境下通过)
i
cludestdiohi
tc10100对应每种情况的最大价值i
tk
apsacki
tmi
t
i
tijw10p10pri
tf
好听全球资料 返回顶部