洛谷P2871與揹包

2021-08-18 19:20:52 字數 973 閱讀 8203

揹包用於尋找最優解,適用於在一堆數值中找尋符合題目要求條件的最優組合。

揹包其實就是兩個迴圈(蒟蒻的蒟蒻總結)

以p2871為例:在可裝下的條件下找到最大價值組合。

起初想用(自認為是動歸)(蒟蒻的思路):

倒著想:第五個有裝下裝不下兩種情況:

1.裝下:五個的價值和。

2裝不下:判斷「四個的最大價值和」與「三個的最大價值和」+「第五個的價值」哪個價值和更大?

最大值即為所找的當今最大價值和。

但是這裡有個疑似bug。就是可能「最大價值和的那三個」的重量加上第五個的重量可能還是超重。。。

尷尬。。。

蒟蒻不會修這段。(沒本事使我警醒)於是去敲兩個迴圈:也就是揹包。

揹包就是用陣列來表示在某個重量下,通過迴圈找到最大價值和。

建立乙個陣列來儲存最大價值和,下標表示重量,迴圈範圍是從最大重量開始,到所迴圈的物品重量為止,依次相減。

所以第乙個迴圈用來迴圈每件物品,內部的第二個迴圈用來輸入、判斷、儲存該重量下的最大價值和。

判斷的大致思路就是:

(例如現在迴圈到了重量為a[i],價值為b[i]的物品)用x[t]來表示重量為t時的儲存價值。

比較x[t-a[i]]+b[i]與x[t]的價值哪個更大。表示就是:是占用a[i]的重量然後進入b[i]的價值所帶來的價值和更多?還是原封不動更多?判斷之後,賦值給x[t],表示的就是在符合重量的範圍內的最大價值。

最後貼上**警醒蒟蒻我:

#include//萬能標頭檔案

using namespace std;

int c[23410],w[23410];

int main()

for(int i=1;i<=n;i++)//揹包的兩個迴圈

}cout<

洛谷 P1060 01揹包

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要度,分為5...

洛谷p1049 01揹包

dp水之旅 揹包有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格式 乙個...

洛谷P2392 揹包問題

看完題目就感覺是個貪心,樣例也能推過去,於是交了以下 author hesorchen date 2020 04 14 10 33 26 lastedittime 2020 05 13 14 29 51 link include include include include include inc...