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], "价值的东西")



点赞