[英]Knapsack using Dyanmic Programming Fails to give correct answer
我用的是我在这个环节中发现的算法实现背包问题的片段背包问题
我之前在Stack Overflow上问过这个问题,我在从程序的return语句获取输出时遇到了问题。 您可以在此处检查上一个问题
我也在这里也附上了算法的代码片段。
我为该算法编写了以下python代码段。 这里是:
def knapsack(v,w,n,W):
V = [[None for x in range(W+1)] for x in range(len(v)+1)]
keep = [[0 for x in range(W+1)] for x in range(len(v)+1)]
# print keep
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]])
keep[i][wx] = 1
else:
V[i][wx] = V[i-1][wx]
keep[i][wx] = 0
K = W
# print keep
for i in range(n,0,-1):
if keep[i][K] == 1:
print i
K = K - w[i-1]
return V[n][W]
print knapsack(v = [10,40,30,50], w=[5,4,6,3],n=4,W=10)
我应该得到4,2作为我的值,但是得到4,3 。 请更正我要去的地方。
如果存在问题:
if w[i-1] <= wx:
V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
keep[i][wx] = 1
else:
V[i][wx] = V[i-1][wx]
keep[i][wx] = 0
如果(w[i-1] <= wx) and (v[i-1]+V[i-1][wx-w[i-1]] <= V[i-1][wx])
是傻瓜
V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
keep[i][wx] = 1
但是你应该
V[i][wx] = V[i-1][wx]
keep[i][wx] = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.