代码
bestV = 0 # 最大价值
currW = 0 # 当前背包重量
currV = 0 # 当前背包价值
bestx = None # 最优解路径
def backtrack(i):
global bestV,bestx,currV,currW,x
if i>= n:
if bestV<currV:
bestV = currV
bestx = x[:]
else:
if currW+w[i]<=c:
x[i]=1
currW += w[i]
currV += v[i]
backtrack(i+1)
currW -= w[i]
currV -= v[i]
x[i]=0
backtrack(i+1)
if __name__=='__main__':
n=6
c=10
w = [2, 2, 3, 1, 5, 2]
v = [2, 3, 1, 5, 4, 3]
x = [0 for i in range(n)]
backtrack(0)
print(bestV) #最大价值
print([i+1 for i in range(n) if bestx[i]]) #最优解路径
## 输出
# 15
# [2, 4, 5, 6]
参考链接
https://www.cnblogs.com/xym4869/p/8513801.html
http://blog.csdn.net/littlethunder/article/details/26621427