揹包問題模板(待更)

2021-10-04 22:43:07 字數 2265 閱讀 5322

01揹包問題

有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。

第 i 件物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。

接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 件物品的體積和價值。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0#include

#include

using

namespace std;

int dp[

10000

],c[

10000

],w[

10000

],v,n;

intmain()

cout<;}完全揹包問題

有 n 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。

第 i 種物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。

接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 種物品的體積和價值。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0#include

#include

using

namespace std;

int dp[

10000

],c[

10000

],w[

10000

],v,n;

intmain()

cout<;}多重揹包問題:

樸素版:

#include

#include

using

namespace std;

int dp[

110]

,c[110

],w[

110]

,s[110

],v,n;

intmain()

cout<;}

優化版i(二進位制優化)

#include

using

namespace std;

const

int n=

12010

;// n=1000*log2000=1000*12, 揹包的個數

int n,m;

int v[n]

,w[n]

;int f[n]

;int

main()

if(s>0)

} n=cnt;

for(

int i=

1;i<=n;i++

)for

(int j=m; j>=v[i]

;j--

) f[j]

=max

(f[j]

, f[j-v[i]

]+w[i]);

cout<

}

分組揹包問題

有 n 組物品和乙個容量是 v 的揹包。

每組物品有若干個,同一組內的物品最多只能選乙個。

每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。

求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行有兩個整數 n,v,用空格隔開,分別表示物品組數和揹包容量。

接下來有 n 組資料:

每組資料第一行有乙個整數 si,表示第 i 個物品組的物品數量;

每組資料接下來有 si 行,每行有兩個整數 vij,wij,用空格隔開,分別表示第 i 個物品組的第 j 個物品的體積和價值;

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0#include

#include

using

namespace std;

int dp[

1000

],v[

110]

,w[110];

intmain()

}}cout<;}

揹包問題模板

特點 每種物品只有一件 子問題定義狀態 bag i v 前i件物品放到乙個容量為v的揹包中可以獲得最大價值 轉移狀態方程 bag i v max bag i 1 v bag i 1 v weight i value i 模板 include include using namespace std i...

揹包問題模板

01揹包在時間複雜度上都是n n v 在這個基礎之上已經不能再進行優化了,在空間複雜度上,我們首先看一下複雜度為o n v 的程式 for int i 1 i n i for int j 0 j w j 但是我們還可以將空間複雜度壓縮為o v 我們會發現這裡每次更新第i層都只是看第i 1層,其他層的...

模板 揹包問題

include include define max a,b a b a b using namespace std const int n 1005 int n,v,v n w n int dp n voidf intmain f printf d n dp v return0 include i...