0/1背包问题:给定n种物品和一个容量为c的背包,物品的重量依次是 2, 2, 3, 1, 5, 2,其价值依次是2, 3, 1, 5, 4, 3,背包问题是如何使选择装入背包内的物品,使得装入背包中的物品的总价值最大。其中,每种物品只有全部装入背包或不装入背包两种选择。
算法
# n 物品数量 int
# c 书包能承受的重量 int
# w 每个物品的重量 list
# v 每个物品的价值 list
def bag(n, c, w, v):
value = [[0 for j in range(c + 1)] for i in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, c + 1):
if j < w[i - 1]:
value[i][j] = value[i - 1][j]
else:
value[i][j] = max(value[i - 1][j], value[i - 1][j - w[i - 1]] + v[i - 1])
# 背包总容量够放当前物体,取最大价值
for x in value:
print(x)
return value
if __name__=='__main__':
n=6
c=10
w = [2, 2, 3, 1, 5, 2]
v = [2, 3, 1, 5, 4, 3]
bag(n,c,w,v)
# 输出
'''
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 2, 2, 2, 2, 2, 2, 2,