5 1 揹包問題

2021-10-01 18:23:28 字數 1462 閱讀 5438

給定一組物品,在揹包限重內,使放入物品的總**最高。

對每一件物品遍歷揹包容量,當揹包可容納值大於等於當前物品時,與之前已放進去的物品所得價值進行對比:

def getdata(

): n = int(input(

"請輸入物品個數:"

)) c = int(input(

"請輸入書包的容量:"

)) w =

v=for i in range(1, n + 1):

dis1 = int(input(

"請輸入第{}個物品的重量:".format(i))

) dis2 = int(input(

"請輸入第{}個物品的價值:".format(i))

)return n,c,w,v

從鍵盤輸入物品個數,揹包容量,物品重量,物品價值。因為如果物品重量大於揹包容量則不會裝入揹包,所以不需加條件限制。

def bag(n, c, w, v):

value =

[[0 for j in range(c + 1)

]for i in range(n + 1)

]for i in range(1, n + 1):

for j in range(1, c + 1):

value[i]

[j]= value[i - 1]

[j]if j >= w[i - 1] and value[i]

[j]< value[i - 1]

[j - w[i - 1]

] + v[i - 1]:

value[i]

[j]= value[i - 1]

[j - w[i - 1]

] + v[i - 1]

return value

def show(n, c, w, value):

print(

'揹包物品最大價值為:', value[n]

[c])

x =[false for i in range(n)

] j = c

for i in range(n, 0, -1):

if value[i]

[j]> value[i - 1]

[j]:

x[i - 1]

= true

j -= w[i - 1]

print(

'裝入物品為:'

)for i in range(n):

if x[i]:

print(

'第', i+1, '個,', end=

'')

回溯法,從尾遍歷物品,當value大於上一行同樣位置的value時,表示放進該物品

51nod 1085 揹包問題 01揹包

1085 揹包問題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000...

51Nod 1085 揹包問題 01揹包

1085 揹包問題 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏 關注 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,...

51nod 1085 揹包問題 01揹包

傳送門 1085 揹包問題 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和...