Python 如何在naive 0-1背包中获取所选项目的列表?

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

我有一个简单的背包问题解决方案的代码,我想得到所选项目的列表,目前它返回的是所选项目值的总和。任何帮助都将不胜感激。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 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吗?哦,没关系,对不起,我看不懂。我知道你在找什么了。给我一点时间,我会更新答案的。