0-1背包问题
一、问题描述?
问题描述:
给定一个容量为W的背包,现有n件物品,每一种物品仅有一件,重量分别为w1,w2,w3,。。。,wn
价值分别为v1,v2,v3,。。。,vn,现在从这n件物品中选择一部分放入背包,物品不可以分割,
要么放要么不放,要求放入物品具有最大价值,且总重量不能超过背包的容量W,
可以用0表示不放入,1表示放入
二、代码实现
代码如下
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 12 14:40:56 2021
@author: lenovo
问题描述:
给定一个容量为W的背包,现有n件物品,每一种物品仅有一件,重量分别为w1,w2,w3,。。。,wn
价值分别为v1,v2,v3,。。。,vn,现在从这n件物品中选择一部分放入背包,物品不可以分割,
要么放要么不放,要求放入物品具有最大价值,且总重量不能超过背包的容量W,
可以用0表示不放入,1表示放入
"""
#二进制的转化
def bag_binary(n):
temp_list = []
for i in range(pow(2, n)):
k = i
temp_num = []
for j in range(n):
if k % 2 == 1:
temp_num.append(1)
elif k % 2 == 0:
temp_num.append(0)
k = k // 2
temp_list.append(temp_num)
return temp_list
bag_list = {
"a":[5,4],
"b":[4,4],
"c":[3,2],
"d":[1,1]
}
def bag(data,w):
sign = 0
sign_list = []
for i in bag_binary(len(data)):
value = 0
weight = 0
for j,key in zip(i,data.keys()):
if weight > 8:
break
if j == 1:
value += bag_list[key][1]
weight += bag_list[key][0]
if weight > w:
break
if sign < value:
sign = value
sign_list = i
print(sign,sign_list)
bag(bag_list,8)
2.打印结果
下一篇
分治法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133837.html