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