python 0-1背包问题(动态规划)

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, 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值