1、问题描述:
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
例子:数据:物品个数n=5,物品重量w[n]={0,2,2,6,5,4},物品价值V[n]={0,6,3,5,4,6}
下面是算法分析的过程:
其实这里就是选择装与不装的问题关键
(1)对于m[5][j],当j<w[5]时,物品5不能放入背包中,此时背包的价值为0。当j>=w[5]时,物品5可以放入背包,此时背包的价值为v[5]。得到结果如下表:
W i 0 1 2 3 4 5 6 7 8 9 10 V
2 | 1 | 6 | |||||||||||
2 | 2 | 3 | |||||||||||
6 | 3 | 5 | |||||||||||
5 | 4 | 4 | |||||||||||
4 | 5 | 0 |
0 |
0 | 0 |
6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
当j<w[4]时,物品4不能放入,此时背包的最大价值为m[4+1][j];即m[4][0..4]=m[5][0..4]
当j>=w[4]时,物品4要么放入要么不放入。当物品4放入背包后,对于物品4+1到n,能达到的最大价值为m[4+1][j-w[4]]+v[4],故此时能达到的最大价值为m[4+1][j-w[4]]+v[4]
当物品4不放入背包时,能达到的最大价值为m[4+1][j]。最后比较放入与不放入情况下,两者的最大值取其大者,分析结果如上表的橙色: