物品质量 w[0] w[1] w[2] ....... w[n] 背包容量c T
物品价值 v[0] v[1] v[2] ....... v[n] 物品种类 n N
(一)设DP(x,y) 表示 从前x项物品中 取出装入 体积为y的背包 的 物品的最大价值。
前x项物品(0---- x-1 , X) 去装 体积容量为y的背包
|-------- 0 当 x=0 或 y=0
DP(x,y) | DP(x-1,y) 不装 第x 种
| DP( x-1,y-w[x] ) + v[x] y-w[x]>=0 装 第x 种
(二)设DP(x,y) 表示 从第x项物品开始 到 第n项物品 中取物品装入 体积为y 的背包 的 得到的最大价值。
从第x项物品 开始 (x, x+1 , X+2 , x+3 , ...........M ......n)
|-------- 0 当 x=M+1 或 y=0
DP(x,y) | DP(x+1,y) 不装 第x 种
| DP( x+1,y-w[x] ) + v[x] y-w[x]>=0 装 第x 种
动态规划算法思想1:
设m[i][j]用来表示从前i项物品中区取出装入体积为j的背包的物品的最大价值。
其中i的范围为0到n,其中j的范围为0到c,程序要寻求的解为m[n][c]。
可以分以下三种情况:
①m[0][j]对所有的j的值为0(物品种类为0), m[i][0]对所有的i的值为0(体积为0)
②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i-1][j] (不装)和 m[i-1][j-w[i-1]]+v[i] (装)
③当前的体积j小于w[i]时,m[i][j]等于m[i-1][j]
动态规划算法思想2:
设m[i][j]用来表示从第i项物品开始到第n项物品中取物品装入体积为j的背包的得到的最大价值。
其中i的范围为0到n-1,其中j的范围为0到c,程序要寻求的解为m[0][c]。
可以分为:
①m[n-1][j] 在当j>=0并且j< w[n-1] 时等于0(装不下),否则等于v[n-1] (可以装上)
②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i+1][j] 和 m[i+1][ j-w[i] ]+v[i]
③当前的体积j小于w[i]时,m[i][j]等于m[i+1][j]