給定一組物品,在揹包限重內,使放入物品的總**最高。
對每一件物品遍歷揹包容量,當揹包可容納值大於等於當前物品時,與之前已放進去的物品所得價值進行對比:
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和...