有 n
nn 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。
第 i
ii 種物品的體積是v
iv_i
vi,價值是 w
iw_i
wi。
求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。
資料範圍
0
v≤
1000
00v≤10
000
,wi≤
1000
00,wi
≤10
00
時間複雜度: o(n#include
#include
using
namespace std;
const
int maxn =
1010
;int n,m,w,v;
int dp[maxn]
[maxn]
;int
main()
}}cout << dp[n]
[m];
return0;
}
mk
)o(nmk)
o(nmk)
,空間複雜度:o(n
2)
o(n^2)
o(n2
)一般這個版本會超時
時間複雜度: o(n#include
#include
using
namespace std;
const
int maxn =
1010
;int n,m,w,v;
int dp[maxn]
;int
main()
} cout << dp[m]
;return0;
}
m)
o(nm)
o(nm
) ,空間複雜度:o(n
)o(n)
o(n)
如果把題目換成,體積剛好為v時的最大價值,如何求解?
這裡跟dp學習之0/1揹包再學習這篇文章一樣,其實跟dp的初始化方式有關,上面用的是把dp全部初始化為0,如果求剛好為v,我們只需按照下面初始化
dp[0]=0
dp[i
]=−i
nf(i
!=0)
dp[0]=0 \quad dp[i]=-inf \quad (i!=0)
dp[0]=
0dp[
i]=−
inf(
i!=0
)
DP之完全揹包問題
such as 設有n種物品,每種物品有乙個重量及乙個價值。但每種物品的數量是無限的,同時有乙個揹包,最大載重量為m,今從n種物品中選取若干件 同一種物品可以多次選取 使其重量的和小於等於m,而價值的和為最大。對於這個問題,啊,還是直接上 吧,在 中理解,解一 只需在01揹包上稍稍改善以下就行 in...
完全揹包dp
完全揹包類似題目 不過求最小值 杭電1114 揹包九講 基本形式 有 n 種物品和乙個容量為 v 的揹包,每種物品都有無限件可用。放入第 i 種 物品的費用是 c i 價值是 w i 求解 將哪些物品裝入揹包,可使這些物品的耗 費的費用總和不超過揹包容量,且價值總和最大。基本思路 這個問題非常類似於...
DP完全揹包
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揹包就是完全...