问题描述:
有3个物品,它们有各自的重量和价值是A[3, 8],B[2, 5],C[5, 12],现有给定容量5的背包,如何让背包里装入的物品具有最大的价值总和?
总体思路:
根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;
代码实现
#使用动态规划求解0-1背包问题
info = [
[3, 8],
[2, 5],
[5, 12]
]
total = 5
pre_max = [0]
# 初始化C背包的容量
for i in range(1, info[-1][0]):
pre_max.append(0)
for i in range(info[-1][0], total+1):
pre_max.append(info[-1][1])
for k in range(len(info)-1, -1, -1):
# k代表info中背包的索引
new_pre_max = [0]
start = 1
# if k == 0:
# start = total
# i表示所装的容量
for i in range(start, total + 1):
value_list = []
if i >= info[k-1][0]:
value_list.append(info[k-1][1] + pre_max[i-info[k-1][0]])
value_list.append(pre_max[i])
new_pre_max.append(max(value_list))
pre_max = new_pre_max
print(max(pre_max))