揹包問題之前學了,不過現在又忘得差不多了(可惜之前沒有寫部落格總結),現在結合例題重新複習一下。
例1:
有 n 個重量和價值分別為wi,vi的物品,現從這些物品中挑選出總量不超過 w 的物品,求所有方案中價值總和的最大值。
輸入包含多組測試用例,每一例的開頭為兩位整數 n、w(1<=n<=10000,1<=w<=1000),接下來有 n 行,每一行有兩位整數 wi、vi(1<=wi<=10000,1<=vi<=100)。
輸出為一行,即所有方案中價值總和的最大值。
3 41 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 41 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 41 22 5
3 73 5
2 33 4
4 5
107
這題跟第一題類似,如果理解第一題為什麼是把剩餘重量從大到小排列,就能理解為什麼只要這題從小到大排列即可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 52 31 2
3 42 2
4 10000000
2 32 2
3 31 2
710
這題需要轉換下思維,因為按照前面的方法,重量太大,肯定會超時,不過,相對而言,價值卻變小了。如果理解了前面幾題,並轉換了思維,這題應該不難。
附上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揹包...