窮舉法解決0/1揹包問題——python
“”“使用窮舉法解決0/1揹包問題。問題描述:給定n個重量為{w1, w2, … ,wn}、價值為{v1, v2, … ,vn}的物品和一個容量為C的揹包,求這些物品中的一個最有價值的子集,且要能夠裝到揹包中。”""
weight = [] # 重量
value = [] # 價值
choose = [] # 選擇方式
B = [] # 把每個物品的選擇轉化為整數並分別列出
C = [] # 最大價格所選擇的方法
D = [] # 把每種選擇轉化為一個列表組成一個新的選擇列表
vmax = 0 # 最大價值
W = 0 # 這個選擇的重量
V = 0 # 這個選擇的價值
t = int(input("請輸入問題規模:"))
M = int(input("請輸入揹包的最大承重量:"))
# 輸入
for cishu in range(t):
weight.append(int(input("請輸入第%d個物品的重量" % cishu)))
value.append(int(input("請輸入第%d個物品的價格" % cishu)))
# 將選擇轉化為二進位制
for xuanze in range(pow(2, t)):
choose.append('{0:05b}'.format(xuanze))
# print(weight)
# print(value)
# print(choose)
u = 1 # 列表的第幾個元素
while u < int(pow(2, t)):
# 把這個選擇劃分到每個物品
for s in choose[u]:
s = int(s)
B.append(s)
B.reverse()
D.append(B)
u += 1
B = []
# print(D)
f = 0
while f < (pow(2, t)-1):
i = 0
while i < t:
W += D[f][i] * weight[i]
V += D[f][i] * value[i]
i += 1
f = f + 1
if W <= M:
if V > vmax:
vmax = V
C.clear()
C.append(D[f-1])
W = 0
V = 0
elif V == vmax:
C.append(D[f-1])
W = 0
V = 0
else:
W = 0
V = 0
else:
W = 0
V = 0
C = str(C)
print("最大價值是%d" % vmax)
print("對應的取法是:"+C)
print("""其中’1‘是取對應位置的物品,’0‘為不取;一個[]為一種取法\n
這個是為規模為5所設定的,若規模小於5,規模是幾看前幾位,\n
若大於五則需更改程式碼第18行5為此時規模\n""")
相關文章
- leetcode題解(0-1揹包問題)LeetCode
- 整數0-1揹包問題
- 動態規劃解0-1揹包問題動態規劃
- 【演算法】0-1揹包問題演算法
- 動態規劃之 0-1 揹包問題詳解動態規劃
- 0-1揹包問題(動態規劃)動態規劃
- 01揹包問題的解決
- 動態規劃之0,1揹包問題動態規劃
- 位元組面試演算法題-0,1揹包問題面試演算法
- 用蠻力法(窮舉法)求解冪集問題
- 揹包問題(01揹包與完全揹包)
- 【動態規劃】0-1揹包問題原理和實現動態規劃
- 揹包問題
- 揹包問題解題方法總結
- 01揹包問題
- 01 揹包問題
- 01揹包和完全揹包問題解法模板
- 揹包九講問題
- 經典揹包問題
- 揹包問題大合集
- 部分揹包問題(挖
- 005多重揹包問題||
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 揹包問題例題總結
- 【leetcode】揹包問題彙總LeetCode
- 2. 01揹包問題
- 01揹包、完全揹包、多重揹包詳解
- JavaScript中揹包問題(面試題)JavaScript面試題
- 51nod 1597 有限揹包計數問題 (揹包 分塊)
- chapter12-2-揹包問題APT
- 關於各種揹包問題
- 【動態規劃】揹包問題動態規劃
- 二維費用揹包問題
- 深入剖析多重揹包問題(上篇)
- 深入剖析多重揹包問題(下篇)
- 揹包問題----動態規劃動態規劃
- TYVJ 1096 數字組合【0-1揹包模型】模型
- 揹包問題的一道經典問題