DP學習之完全揹包

2021-10-04 09:48:17 字數 1456 閱讀 8454

有 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

#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;

}

時間複雜度: o(n

mk

)o(nmk)

o(nmk)

,空間複雜度:o(n

2)

o(n^2)

o(n2

)一般這個版本會超時

#include

#include

using

namespace std;

const

int maxn =

1010

;int n,m,w,v;

int dp[maxn]

;int

main()

} cout << dp[m]

;return0;

}

時間複雜度: o(n

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揹包就是完全...