揹包問題例題總結

2021-08-17 22:39:49 字數 2763 閱讀 1024

揹包問題之前學了,不過現在又忘得差不多了(可惜之前沒有寫部落格總結),現在結合例題重新複習一下。

例1:

有 n 個重量和價值分別為wi,vi的物品,現從這些物品中挑選出總量不超過 w 的物品,求所有方案中價值總和的最大值。

輸入包含多組測試用例,每一例的開頭為兩位整數 n、w(1<=n<=10000,1<=w<=1000)

,接下來有 n 行,每一行有兩位整數 wi、vi(1<=wi<=10000,1<=vi<=100)。

輸出為一行,即所有方案中價值總和的最大值。

3 4

1 22 5

3 7

9

附上ac**加解析:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define long long ll

int dp[1111];//建立乙個dp陣列,用來儲存剩下w重量可用時所擁有的價值最大w,即dp[w] = v

int main()

return 0;

}

例二:

有 n 個重量和價值分別為wi,vi的物品,現從這些物品中挑選出總量剛好為 w 的物品

,求所有方案中價值總和的最大值。

輸入包含多組測試用例,每一例的開頭為兩位整數 n、w(1<=n<=10000,1<=w<=1000)

,接下來有 n 行,每一行有兩位整數 wi、vi(1<=wi<=10000,1<=vi<=100)。

輸出為一行,即所有方案中價值總和的最大值。若不存在剛好填滿的情況,輸出「-1」。

3 4

1 22 5

2 13 4

1 22 5

5 1

6

-1

這題就是上題的改版,附上ac**:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define long long ll

int dp[11111];

int main()

return 0;

}

例3:

有 n 種(每一種有無數個)重量和價值分別為wi,vi的物品,現從這些物品中挑選出總

量不超過 w 的物品,求所有方案中價值總和的最大值。

輸入包含多組測試用例,每一例的開頭為兩位整數 n、w(1<=n<=10000,1<=w<=1000)

,接下來有 n 行,每一行有兩位整數 wi、vi(1<=wi<=10000,1<=vi<=100)

輸出為一行,即所有方案中價值總和的最大值。

3 4

1 22 5

3 73 5

2 33 4

4 5

10

7

這題跟第一題類似,如果理解第一題為什麼是把剩餘重量從大到小排列,就能理解為什麼只要這題從小到大排列即可ac

附上ac**:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define long long ll

int dp[11111];

int main()

return 0;

}

例4:

有 n 個重量和價值分別為wi,vi的物品,現從這些物品中挑選出總量不超過 w 的物品,求所有方案中價值總和的最大值。

輸入包含多組測試用例,每一例的開頭為兩位整數 n、w;接下來有 n 行,每一行有兩位整數 wi、vi

其中:1<=n<=100

1<=w<=1000,000,000

1<=wi<=10,000,000

1<=vi<=100。

輸出為一行,即所有方案中價值總和的最大值。

4 5

2 31 2

3 42 2

4 10000000

2 32 2

3 31 2

7

10

這題需要轉換下思維,因為按照前面的方法,重量太大,肯定會超時,不過,相對而言,價值卻變小了。如果理解了前面幾題,並轉換了思維,這題應該不難。

附上ac**:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define long long ll

int dp[11111];

int main()

} return 0;

}

揹包問題例題

p1060 開心的金明 題目鏈結 思路 0 1揹包問題 0 1揹包問題的模板,dp陣列用二維也可以都是一樣的道理,一維是壓縮了空間 for i 1.n 物品從1到n分別決定選或者不選 for j ba 0 揹包從最大體積到0 if j w i 可以裝的下 dp j max dp j dp j w i...

動態規劃揹包問題(例題)

物品編號 1 2 3 4 物品體積 2 3 4 5 物品價值 3 4 5 6 求容積為8的揹包能裝的最大價值為多少?動態規劃解題步驟 1 確定狀態 注意 動態規劃一般要開陣列,首先要明確陣列的每個元素所代表的意義。確定狀態需要兩個意識 1 最後一步 2 子問題。2 轉移方程的確定 3 初始化條件和邊...

揹包問題 01揹包總結

寫這篇部落格的原因是因為自己初學揹包的時候覺得好玄學。只是知道怎麼寫,但是具體是為什麼覺得很玄妙。在此其實希望和我一樣的小白萌新早點明白其中的原理,其實原理很簡單,只要懂了這個圖,我想01揹包就不成問題了。首先要明確這張表是至底向上,從左到右生成的。關於01揹包的題目暫時整理了一點。1.簡單01揹包...