揹包问题是一个典型的动态规划问题,这个不对其作解释了,直接给出代码。
求重量与价值分别为:[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], "价值的东西")