對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">