written with stackedit.每件物品不限數量
轉化為0/1揹包(?)
每個物體盡可能多放(why?)
遞推式為:
f (i
,j)=
max,
∀kw[
i]
<
wf(i,j)=max\ ,\forall kw[i]f(
i,j)
=max
,∀kw
[i]<
w其他思路和01揹包相同.
檢查每乙個k不會造成越界的k.
0/1揹包就是完全揹包的退化問題.
'''
@description:
@date: 2019-10-31 22:20:43
@author: i-hsien
@lasteditors: i-hsien
@lastedittime: 2019-10-31 22:42:45
'''def
build
(set
,weight):if
set==
or weight==0:
return
0 kr=
k=0while
(k*set[-
1][0
]<=weight)
:set[:
-1],weight-k*
set[-1
][0]
)+k*
set[-1
][1]
) k+=
1return
max(kr)
if __name__==
"__main__"
: temp=
input()
.split(
) maxweight=
int(temp[0]
) quantity=
int(temp[1]
) array=
#[(weight,value)]
for _ in
range
(quantity)
: tor=
input()
.split()(
int(tor[0]
),int(tor[1]
)))print
(int
(build(array,maxweight)
))
果然又tle了…
這遞迴不是等著爆棧嗎…
完全揹包dp
完全揹包類似題目 不過求最小值 杭電1114 揹包九講 基本形式 有 n 種物品和乙個容量為 v 的揹包,每種物品都有無限件可用。放入第 i 種 物品的費用是 c i 價值是 w i 求解 將哪些物品裝入揹包,可使這些物品的耗 費的費用總和不超過揹包容量,且價值總和最大。基本思路 這個問題非常類似於...
dp 完全揹包)
有 n n n 種物品和乙個容量是 v v v 的揹包,每種物品都有無限件可用。第 i i i 種物品的體積是 v i vi vi,價值是 w i wi wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v n,v n,v,用...
完全揹包 貪心 dp
考慮以下問題 有n nn種物品,第i ii種有z iz i zi 個,價值是y iy i yi 重量是w iw i wi 那麼把這些物品放入大小為x xx的揹包,的最大價值是多少 n,yi 50 wi,z i 10 9 n,y i leq 50 w i,z i leq 10 9 n,yi 50w i...