对n个物品进行编号1,2...n
最优子结构:
假设对一个重量为W,n个物品的最优解法是S.
设解法S中所拿的物品最大的编号是i.
则S-{i}一定是对于重量为W − Wi , 包含物品为1…i-1的最优解
Dynamic progamming:
定义 c[i,w]为对于最大重量为w,物品为1….i的解法的价值
则有
c[i,w] = 0 if i = 0 or w = 0 ,
c[i − 1,w] if wi > w ,
max(vi + c[i − 1,w − wi ], c[i − 1,w] ) if i > 0 and w ≥ wi .
算法:
DYNAMIC-0-1-KNAPSACK(v,w, n,W)
for w ← 0 to W
do c[0,w] ← 0
for i ← 1 to n
do c[i, 0] ← 0
for w ← 1 to W
do if wi ≤ w
then if vi + c[i − 1,w − wi ] > c[i − 1,w]
then c[i,w] ← vi + c[i − 1,w − wi ]
else c[i,w] ← c[i − 1,w]
else c[i,w] ← c[i − 1,w]
width="728" scrolling="no" height="90" frameborder="0" align="middle" src="http://download1.csdn.net/down3/20070601/01184120111.htm" marginheight="0" marginwidth="0">