动态规划求解0-1背包问题

背包问题描述:有n种物品x(1),x(2), ...x(n), 其价值与重量各为v(i)与w(i) (i=1,2,...n), 其中所有的 w(i) 均为整数。 如何搭配选取这 n 种物品, 使得选出的物品价值最高, 但总重量不超过负重限制 m?
要求写出详细的求解过程。谢谢!
在线等待
不是要程序.是运筹学里的,我想要一个详细的求解过程,.书上的不够详细.谢谢了.

难道是想要程序?

F[I,j]为前i个物品中选择若干个放入使其体积正好为j的标志,为布尔型。
实现:将最优化问题转化为判定性问题
f [I, j] = f [ i-1, j-w[i] ] (w[I]<=j<=v) 边界:f[0,0]:=true.
For I:=1 to n do
For j:=w[I] to v do F[I,j]:=f[I-1,j-w[I]];
优化:当前状态只与前一阶段状态有关,可降至一维。
F[0]:=true;
For I:=1 to n do begin
F1:=f;
For j:=w[I] to v do
If f[j-w[I]] then f1[j]:=true;
F:=f1;
End;

B.求可以放入的最大价值。
F[I,j] 为容量为I时取前j个背包所能获得的最大价值。
F [i,j] = max { f [ i – w [ j ], j-1] + p [ j ], f[ i,j-1] }

C.求恰好装满的情况数。
DP:
Procedure update;
var j,k:integer;
begin
c:=a;
for j:=0 to n do
if a[j]>0 then
if j+now<=n then inc(c[j+now],a[j]);
a:=c;
end;

在0 / 1背包问题中,需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即p1*x1+p2*x1+...+pi*xi(其1<=i<=n,x取0或1,取1表示选取物品i) 取得最大值。
在该问题中需要决定x1 .. xn的值。假设按i = 1,2,...,n 的次序来确定xi 的值。如果置x1 = 0,则问题转变为相对于其余物品(即物品2,3,.,n),背包容量仍为c 的背包问题。若置x1 = 1,问题就变为关于最大背包容量为c-w1 的问题。现设r?{c,c-w1 } 为剩余的背包容量。
在第一次决策之后,剩下的问题便是考虑背包容量为r 时的决策。不管x1 是0或是1,[x2 ,.,xn ] 必须是第一次决策之后的一个最优方案,如果不是,则会有一个更好的方案[y2,.,yn ],因而[x1,y2,.,yn ]是一个更好的方案。
假设n=3, w=[100,14,10], p=[20,18,15], c= 116。若设x1 = 1,则在本次决策之后,可用的背包容量为r= 116-100=16 。[x2,x3 ]=[0,1] 符合容量限制的条件,所得值为1 5,但因为[x2,x3 ]= [1,0] 同样符合容量条件且所得值为1 8,因此[x2,x3 ] = [ 0,1] 并非最优策略。即x= [ 1,0,1] 可改进为x= [ 1,1,0 ]。若设x1 = 0,则对于剩下的两种物品而言,容量限制条件为116。总之,如果子问题的结果[x2,x3 ]不是剩余情况下的一个最优解,则[x1,x2,x3 ]也不会是总体的最优解。在此问题中,最优决策序列由最优决策子序列组成。假设f (i,y) 表示剩余容量为y,剩余物品为i,i + 1,...,n 时的最优解的值,即:利用最优序列由最优子序列构成的结论,可得到f 的递归式为:
当j>=wi时: f(i,j)=max{f(i+1,j),f(i+1,j-wi)+vi} ①式
当0<=j<wi时:f(i,j)=f(i+1,j) ②式
fn( 1 ,c) 是初始时背包问题的最优解。
以本题为例:若0≤y<1 0,则f ( 3 ,y) = 0;若y≥1 0,f ( 3 ,y) = 1 5。利用②式,可得f (2, y) = 0 ( 0≤y<10 );f(2,y)= 1 5(1 0≤y<1 4);f(2,y)= 1 8(1 4≤y<2 4)和f(2,y)= 3 3(y≥2 4)。因此最优解f ( 1 , 11 6 ) = m a x {f(2,11 6),f(2,11 6 - w1)+ p1} = m a x {f(2,11 6),f(2,1 6)+ 2 0 } = m a x { 3 3,3 8 } = 3 8。
现在计算xi 值,步骤如下:若f ( 1 ,c) =f ( 2 ,c),则x1 = 0,否则x1 = 1。接下来需从剩余容量c-w1中寻求最优解,用f (2, c-w1) 表示最优解。依此类推,可得到所有的xi (i= 1.n) 值。
在该例中,可得出f ( 2 , 116 ) = 3 3≠f ( 1 , 11 6 ),所以x1 = 1。接着利用返回值3 8 -p1=18 计算x2 及x3,此时r = 11 6 -w1 = 1 6,又由f ( 2 , 1 6 ) = 1 8,得f ( 3 , 1 6 ) = 1 4≠f ( 2 , 1 6 ),因此x2 = 1,此时r= 1 6 -w2 = 2,所以f (3,2) =0,即得x3 = 0。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-07
同求……我也可以给分的……

动态规划浅析——0-1背包问题
用动态规划求解0-1背包问题时,需要定义一个动态规划表,表示在剩余容量为[公式] 时,选择第[公式] 件物品的最大价值。从背包已满到背包空,逐步填充这个表,通过状态转移方程来决定每个阶段是否选择物品以及如何影响后续阶段的价值。举个例子,假设背包容量为[公式],物品1重2,值3。我们通过状态转移...

0-1背包问题的动态规划算法
0-1背包问题的动态规划算法主要解决的问题是如何在有限的容量内选择物品,使得总价值最大。具体来说,给定一组物品,每种物品有其重量和价值,总重量有限,选择哪些物品才能获得最大价值。此问题属于NP问题,贪婪算法无法保证最优解。定义子问题为在前i个物品中,选择总重量不超过j的物品,使得总价值最...

【学界】0-1背包问题的动态规划算法
动态规划算法提供了一种高效求解0-1背包问题的方法。通过定义子问题(即在前i个物品中选择不超过W重量的物品,使得价值最大),并利用递推关系(选择第i个物品或不选择),可以构建一个二维表来存储所有可能的最优解。算法的复杂度是O(nW),其中n是物品数量,W是总重量限制。利用动态规划,可以有效...

0\/1 背包 —— 哈希表 和 动态规划 的完美契合
1、状态设计 2、状态转移方程 3、初始状态 当状态进行转移时,V要么来自V-Wi,要么来自V-Wi,因此必然存在一个初始状态,即“前0个物品放入一个容量为0的背包”,此状态下的最大价值为0,即V-Wi=0。4、非法状态 5、状态初始化 二、0\/1 背包问题的实现 1、背包物品结构设计 2、状态数组 3、...

背包问题(动态规划)
0-1背包问题<\/给定背包容量M和有限数量N的物品,每个物品都有重量w[i]和价值c[i]。目标是通过最优选择,使得背包内物品的总价值最大。动态规划的核心在于构建一个 dp<\/ 矩阵,其中 dp[i][j] 代表前i个物品在容量j下的最大价值。状态转移方程揭示了关键:当背包容量j小于物品i的重量时,dp[i...

0-1背包问题的多种解法代码(动态规划、贪心法、回溯法、分支限界法...
\/* 0-1背包问题具有最优子结构性质和子问题重叠性质,适于 \/* 采用动态规划方法求解 \/* \/* 2.1 最优子结构性质 \/* 设(y1,y2,...,yn)是给定0-1背包问题的一个最优解,则必有 \/* 结论,(y2,y3,...,yn)是如下子问题的一个最优解: \/* max sum_{i=2 to n} (vi*xi) \/* (1) sum_{i=...

动态规划中的0-1背包问题怎么去理解?要求给出具体实例和详细步骤...
上界函数等必要的函数,并将此函数用于解0-1背包问题。0-1 背包问题描述如下:给定n 种物品和一个背包。物品i 的重量是 wi ,其价值为 vi ,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有2 种选择,即装入背包或不装入背包...

动态规划中的0-1背包问题怎么去理解?要求给出具体实例和详细步骤...
1号物品先试,0,1,2,的容量都不能放.所以置0,背包容量为3则里面放4.这样,这一排背包容量为4,5,6,...10的时候,最佳方案都是放4.假如1号物品放入背包.则再看2号物品.当背包容量为3的时候,最佳方案还是上一排的最价方案c为4.而背包容量为5的时候,则最佳方案为自己的重量5.背包容量为7...

背包问题总结( 1 ) 01 背包,完全背包,多重背包,分组背包
动态规划目标一般涉及最小化、最大化或计数。完全背包问题分析:(1) 问题描述:有N种物品与容量为V的背包,每种物品数量无限。求解在不超重的前提下,总价值最大。(2) 状态表示:与01背包一致,为[i][j],表示在1~i范围内选择物品,体积为j的所有状态集合。(3) 解法1:暴力解法,时间复杂度较...

计算机算法分析考试:动态规划0-1背包问题,怎么算
抽象描述如下: x[n]:表示物品的选择,x[i]=1表示选择放进物品i到背包中。问题分析: 1.抽象之后背包问题转换为找到一个最优的数组,x1,x2,...,xn的0-1序列。 2.假设最优解的序列为x1,x2,...,xn,能使背包容量C的总价值最大. 如果,x1=1,则x2,...,xn是C-w1容...

相似回答