背包问题2012.ppt

背包问题2012概要

背包问题 之 01背包问题 我们来看一下问题: 一个旅行者有一个最多能用M公斤的背包,现在有N件物品, 它们的重量分别是W1,W2,...,Wn, 它们的价值分别为P1,P2,...,Pn. 若每种物品只有一件求旅行者能获得最大总价值。 输入格式: M,N W1,P1 W2,P2 ...... 输出格式: X 因为背包最大容量M未知。所以,我们的程序要从1到M一个一个的试。比如,开始任选N件物品的一个。看对应M的背包,能不能放进去,如果能放进去,并且还有多的空间,则,多出来的空间里能放N-1物品中的最大价值。怎么能保证总选择是最大价值呢?看下表。 测试数据: 10,3 3,4 4,5 5,6 考虑用动态规划的方法来解决,这里的: 阶段是:在前n件物品中,选取若干件物品放入背包中; 状态是:在前n件物品中,选取若干件物品放入所剩空间为w的背包中的所能获得的最大价值; 决策是:第n件物品放或者不放; 由此可以写出动态转移方程: 我们用f[i,j]表示在前 i 件物品中选择若干件放在所剩空间为 j 的背包里所能获得的最大价值 f[i,j]=max{f[i-1,j-wi]+pi (j=wi), f[i-1,j]} 这样,我们可以自底向上地得出在前m件物品中取出若干件放进背包能获得的最大价值,也就是f[m,w] 算法设计如下: procedure make;

文档评论(0)

1亿VIP精品文档

相关文档