我正在使用我在此链接Knapsack Problem
中找到的算法实现背包问题的片段我也在这里附上了算法的片段。
我为该算法编写了以下python代码段。这是:
def knapsack(v,w,n,W):
V = [[None for x in range(W+1)] for x in range(len(v)+1)]
for wy in range(W+1):
V[0][wy] = 0
for i in range(1,n+1):
for wx in range(W+1):
# print i,wx
if w[i] <= wx:
V[i][wx] = max(V[i-1][wx], v[i]+V[i-1][wx-w[i]])
else:
V[i][wx] = V[i-1][wx]
return V[n][W]
print knapsack(v = [10,40,30,50],w=[5,4,6,3],n=4,W=10)
我应该在 [4,9] 位置输出 90 。我在这里做错了什么?
答案 0 :(得分:2)
我不确定,但我认为错误是
v and w
是从0开始的索引(0到n-1)1 to n
w[n]
或v[n]
会抛出IndexError
更新了代码:
def knapsack(v,w,n,W):
V = [[None for x in range(W+1)] for x in range(len(v)+1)]
for wy in range(W+1):
V[0][wy] = 0
for i in range(1,n+1):
for wx in range(W+1):
# print i,wx
if w[i-1] <= wx:
V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
else:
V[i][wx] = V[i-1][wx]
return V[n][W]
print knapsack(v = [10,40,30,50],w=[5,4,6,3],n=4,W=10)
输出现在为90
。
检查Ideone
处的结果