首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

动态规划 - 0-1背包有关问题

2012-08-25 
动态规划 - 0-1背包问题有一个背包,容量为c。有n个物体X0,X1,X2,...,Xn-1,重量分别为W0,W1,W2,...,Wn-1,价

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

有一个背包,容量为c。

有n个物体X0,X1,X2,...,Xn-1,重量分别为W0,W1,W2,...,Wn-1,价值分别为V0,V1,V2,...,Vn-1。

将这n个物体中的任意几个放入背包,使得在不超过背包容量的情况下,背包中的物体总价值最大。

数学描述:

c>0

Wi>0, Vi>0, 0<=i<=n-1

求:[X0,X1,X2,...,Xn-1],其中Xi=0或1,使得X0*V0+X1*V1+...+Xn-1*Vn-1最大

约束条件:X0*W0+X1*W1+...+Xn-1*Wn-1 <= c


(1)最优子结构

假设[X0,X1,X2,...,Xn-1]是 0~n-1个物体且最大值为c 的最优解,

那么[X0,X1,X2,...,Xn-2]是 0~n-2个物体且最大值为c-(Xn-1*Wi-1) 的最优解。可用反证法证明。

(2)建立递归关系

以max[i][j]作为 0~i个物体且最大容量为j 的最优解,易知max的维度为 n*(c+1)

当i=0时:如果 j<W0,max[i][j]=0

        如果 j>=W0,max[i][j]=Vi

当i>=0时:如果 j<Wi,max[i][j]=max[i-1][j]

         如果 j>=Wi,max[i][j]=MAX(max[i-1][j], max[i-1][j-Wi]+Vi)。分为包含Xi和不包含Xi两种。

(3)自底向上,计算各个子问题的最优解

详细情况(2)中已描述

(4)求解整个问题的最优解

max[n-1][c]即是整个问题的最优解,即最大价值。

从max[n-1][c]开始向前追溯,如果 max[i][j] == max[i - 1][j],就是不包含Xi,否则就是包含Xi。


代码:

[0, 1, 4]max : 15

意为:将X0,X1,X4装入背包时的总价值最大,为15.






热点排行