使用python 解決揹包問題,**還可以進一步優化,先貼上出來,以作以後處理
#coding:utf-8
#存放多種組合,key為**,value為good_store例項
combination = {}
class goods(object):
'''#物品類
#三個屬性,**,體積,物品名稱
'''def __init__(self, name, price, volume):
self.price = price
self.volume = volume
self.name = name
class good_store(object):
'''#一種物品組合儲存容器類
#四個屬性,容器內物品總體積,容器內物品總價值,容器內物品,容器最大容積
'''def __init__(self, max_v):
self.volume = 0
self.price = 0
self.goods =
self.max_v = max_v
def put(self, goods):
'''#存放物品,存放成功返回true,否則返回false
'''if self.volume+goods.volume > self.max_v:
return false
self.volume += goods.volume
self.price += goods.price
return true
def find_combination(dst, store, bag_volume ):
'''#遞迴完成物品組合放置
#'''
global combination
for i in dst:
if store.put(i):
new_dst = [j for j in dst if j != i]
if not find_combination(new_dst,store, bag_volume):
combination[store.price] = store
store = good_store(bag_volume)
else:
continue
return false
if __name__ == "__main__":
#global combination
bag_volume = 40
aa = goods('aa', 10, 5)
bb = goods('bb', 20, 30)
cc = goods('cc', 15, 10)
dd = goods('dd', 6, 2)
ee = goods('ee', 11, 11)
ff = goods('ff', 25, 11)
dst = [aa, bb, cc, dd, ee, ff]
st = good_store(bag_volume)
find_combination(dst, st, bag_volume)
print(max(combination.keys()))
print(combination[max(combination.keys())] )
python解決揹包 揹包變形問題
有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。例如 揹包的承重為10,現在有a,b,c,d,e五件物品,每件物品的重量分別為2,2,6,5,4,價值分別為6,3,5,4...
python揹包問題 揹包問題Python
題目 揹包容量ba 物品thing v 問題 1.是否可以裝滿揹包2.裝滿揹包最少需要多少件物品3.裝滿揹包最多需要多少件物品4.該揹包最多一共可以裝多重的物品5.裝滿揹包一共有多少種方案 就算物品重量一樣,但也是不同的方案 一 01揹包 def bag 01 bag v,thing v 是否可以裝...
完美解決揹包問題 01揹包 完全揹包
01揹包 每種物品就有乙個 c 3,2,6,7,1,4,9,5 cost 單個物品所佔容量 v 6,3,5,8,3,1,6,9 每個物品的價值 target 15 揹包容量 f 0 for i in range 0,target 1 初始化 元素個數為揹包大小加1 target 1 n len c ...