python 解決揹包問題

2021-08-28 05:32:22 字數 1676 閱讀 2594

使用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 ...