0-1,完全,背包问题精简python实现

# 物品的重量和价值
weights = [5, 4, 7, 2, 6]
values = [12, 3, 10, 3, 6]
# 背包容量
Capacity = 15

# 0&1背包方案
res = [0]*16
for i in range(len(weights)):
    for j in range(len(res)-1, -1, -1):
        if j >= weights[i]:
            res[j] = max(res[j], max(res[j - 1], res[j - weights[i]] + values[i]))

print(res)
# 完全背包方案
res = [0]*16
for c in range(0, Capacity+1):
    for i, weight in enumerate(weights):
        if c >= weight:
            res[c] = max(res[c], max(res[c-1], (res[c - weight] + values[i])))
print(res)

# 多重背包问题
Capacity = 9
weights = [2, 4]
values = [100, 300]
counts = [4, 1]
res = [0] * (Capacity+1)
for i in range(len(weights)):   # 物品种类
    for c in range(counts[i]):  # 物品个数
        for j in range(len(res)-1, -1, -1):  # 包空间
            if j >= weights[i]:
                res[j] = max(res[j], max(res[j - 1], res[j - weights[i]] + values[i]))
print(res)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值