0-1背包问题的 python 实现

    背包问题是一个典型的动态规划问题,这个不对其作解释了,直接给出代码。

    求重量与价值分别为:[10, 15], [15, 25], [20, 35], [25, 45], [30, 55], [35, 70],背包容量为 80 时可以容纳的最大价值。

#动态规划求背包问题

Things = [[0, 0], [10, 15], [15, 25], [20, 35], [25, 45], [30, 55], [35, 70]]
# Things 代表物品的重量与价值
nums_0 = [0 for i in range(81)]
nums = []
nums.append(nums_0)
#假设背包大小为 80,nums[n][m] 代表 只考虑前 n 个物品时 m 容量背包的最大价值

def func(m, n):
    if m < Things[n][0]:
        return nums[n - 1][m]
    else:
        return max(nums[n - 1][m], nums[n - 1][m - Things[n][0]] + Things[n][1])
#动态计算 前 n 个物品时 m 容量背包的最大价值

for i in range(1,7):
    numstemp = []
    for j in range(81):
        numstemp.append(func(j, i))
    nums.append(numstemp)
#得到推导矩阵

for j in range(81):
    if j % 5 == 0:
        print(j, end='   ')
print(end='\n\n')
for num in nums[1:]:
    for i in range(len(nums[0])):
        if i % 5 == 0:
            print(num[i], end='   ')
    print()
#输出推导矩阵

print("80 容量的背包可以最大装", nums[6][80], "价值的东西")



 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值