python 0-1背包问题(回溯法)

在这里插入图片描述
代码

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值