Python 如何在naive 0-1背包中获取所选项目的列表?
我有一个简单的背包问题解决方案的代码,我想得到所选项目的列表,目前它返回的是所选项目值的总和。任何帮助都将不胜感激。PYTHON代码:Python 如何在naive 0-1背包中获取所选项目的列表?,python,algorithm,computer-science,knapsack-problem,Python,Algorithm,Computer Science,Knapsack Problem,我有一个简单的背包问题解决方案的代码,我想得到所选项目的列表,目前它返回的是所选项目值的总和。任何帮助都将不胜感激。PYTHON代码: def knapSack(W, wt, val, n): # Base Case if n == 0 or W == 0: return 0 # If weight of the nth item is # more than Knapsack of capacity W, # then t
def knapSack(W, wt, val, n):
# Base Case
if n == 0 or W == 0:
return 0
# If weight of the nth item is
# more than Knapsack of capacity W,
# then this item cannot be included
# in the optimal solution
if (wt[n-1] > W):
return knapSack(W, wt, val, n-1)
# return the maximum of two cases:
# (1) nth item included
# (2) not included
else:
return max(
val[n-1] + knapSack(
W-wt[n-1], wt, val, n-1),
knapSack(W, wt, val, n-1))
# end of function knapSack
#Driver Code
items= [a, b, c, d, e]
val = [60, 100, 120, 125, 129]
wt = [10, 20, 30, 40, 50]
W = 70
n = len(val)
print knapSack(W, wt, val, n)
因此,这里的诀窍是通过选择该路径返回所选项目的路径
p
,以及累积的v
值。然后根据最大值v
选择最佳路径
def背包(W、wt、val、n):
#基本情况
如果n==0或W==0:
返回0,[]
#如果第n项的重量为
#超过背包容量W,
#那么这个项目就不能包括在内了
#在最优解中
如果(wt[n-1]>W):
返回背包(W、wt、val、n-1)
#最多返回两个案例:
#(1)包括第n项
v1,p1=背包(W-wt[n-1],wt,val,n-1)
v1+=val[n-1]
p1=[项目[n-1]]+p1
#(2)不包括
v2,p2=背包(W,wt,val,n-1)
如果v1>=v2,则返回(v1,p1),否则返回(v2,p2)
如果名称=“\uuuuu main\uuuuuuuu”:
项目=列表('abcde')
val=[60100120125129]
wt=[10,20,30,40,50]
W=70
n=len(val)
val,路径=背包(W,wt,val,n)
打印(val,路径)
注意,您可以使用一些额外的措施来加速此代码。最值得注意的将是添加备忘录,然后将其转换为自下而上的dp解决方案。如果您想了解更多有关如何应用这些功能的信息,请随时发表评论。我只是按原样运行,结果得到了285条。你得到的是534吗?哦,没关系,对不起,我看不懂。我知道你在找什么了。给我一点时间,我会更新答案的。