窮舉法解決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""")
相關文章
- 0-1揹包問題 動態規劃法動態規劃
- leetcode題解(0-1揹包問題)LeetCode
- 動態規劃解0-1揹包問題動態規劃
- 【演算法】0-1揹包問題演算法
- 01揹包問題的解決
- 動態規劃之 0-1 揹包問題詳解動態規劃
- 0-1揹包問題(動態規劃)動態規劃
- 動態規劃之0,1揹包問題動態規劃
- 位元組面試演算法題-0,1揹包問題面試演算法
- 演算法——貪心演算法解0-1揹包問題演算法
- 揹包問題(01揹包與完全揹包)
- 0-1 揹包問題詳解(暫告一段落)
- JavaScript 揹包問題詳解JavaScript
- 揹包問題
- 【動態規劃】0-1揹包問題原理和實現動態規劃
- 資料結構與演算法——0-1揹包問題資料結構演算法
- 揹包問題解題方法總結
- ACM 揹包問題ACM
- 01揹包問題
- 動態規劃0-1揹包動態規劃
- 揹包問題大合集
- 從【零錢兌換】問題看01揹包和完全揹包問題
- JavaScript中揹包問題(面試題)JavaScript面試題
- 揹包問題例題總結
- 01揹包、完全揹包、多重揹包詳解
- poj1276 多重揹包問題(二進位制解決方案)
- 揹包問題----動態規劃動態規劃
- 【動態規劃】揹包問題動態規劃
- Java實現-揹包問題IJava
- Java實現-揹包問題IIJava
- Java實現-揹包問題VIJava
- 揹包問題的演算法演算法
- chapter12-2-揹包問題APT
- 二維費用揹包問題
- 實現24點遊戲-窮舉法遊戲
- 揹包問題的一道經典問題
- 圖解二維完全揹包問題——降維打擊圖解
- 動態規劃 01揹包問題動態規劃