背包模型题目集合
文章目錄
- 背包模型
- 01背包
- AcWing 423. 采藥
- AcWing 1024. 裝箱問題
- Luogu 2925 干草出售
- Proud Merchants
- 完全背包
- P1616 瘋狂的采藥
- P1853 投資的最大效益
- Piggy-Bank
- 多重背包
- Luogu P1776 寶物篩選
- HDU 1059 Dividing
- 混合背包
- P1833 櫻花
- 二維費用背包問題
- P1507 NASA的食物計劃
- HDU 2159 FATE
- 分組背包
- AreYouBusy
- P1757 通天之分組背包
- HDU 1712 ACboy needs your help
- 有依賴背包問題
- P1064 [NOIP2006 提高組] 金明的預算方案
背包模型
01背包
AcWing 423. 采藥
思路:
裸的01背包問題,在本題中我們將采藥時間當作背包容量限制,
dp[i][j]表示前i個草藥用了j個時間的最大價值
當然可以狀態壓縮,壓縮成一維情況
代碼:
代碼
狀態壓縮代碼
AcWing 1024. 裝箱問題
思路:
01背包問題,在本題中求剩余空間最小,我們可以求最多裝多少空間,然后一減就行,最多空間怎么求?我們將空間同時看作01背包里的價值和體積,然后求最大價值即可
代碼:
Luogu 2925 干草出售
鏈接
思路:
和上一個裝箱問題一樣,體積同時也當價值
代碼:
Proud Merchants
鏈接:
思路:
講的很詳細
01背包加上一個限制條件
每個物品有三個屬性:p,q,v
只有當剩余前的數量>=q時才能買
對于兩個物品:
如果先買1后買2,至少需要錢p1+q2
如果先買1后買1,至少需要p2+q1
如果買1更劃算:p1+q2<p2+q1
–> q1-p1>q2-p2
也就是差值大的(限制金額和購買金額)先買
但是我們排序時,要按照q-p從小到大排序,因為我們的狀態表達式dp[i][j]=dp[i-1][j-p[i]]+v[i],式子dp[i-1][j-p[i]]+v[i]說明了我們先買了第i件商品,再考慮第i-1件,這相當于排在后面的商品會先買,所以我們要將差值大的放在后面
代碼:
完全背包
P1616 瘋狂的采藥
鏈接
題解:
完全背包裸題
代碼:
P1853 投資的最大效益
鏈接:
題解:
不難看出是完全背包,區別在于要投資n年,而每個債券是年計算的,所以我們每次求出一年的最大價值,然后加在本金上,繼續求下一年,也就是s隨著年份增加是改變的,每次增加dp[s]
記得數組要開大不然會被卡
代碼:
Piggy-Bank
鏈接:
思路:
題目問最少能存多少錢?這么問的前提是空間都占滿了,所以我們將dp的初始值不能賦為0,因為求最少,所以賦值為無窮大,然后正常走一邊完全背包即可
代碼:
多重背包
Luogu P1776 寶物篩選
多重背包的裸題,記得用二進制優化
代碼;
HDU 1059 Dividing
鏈接:
題解:
要求能否平分價值,那我們就求出總價值,然后看能否用用硬幣正好表示出總價值的一半,如果可以就說明能均分。多重背包+dp初始值為-inf
坑點:
代碼:
混合背包
P1833 櫻花
題目:
題解:
混合背包的裸題
代碼:
二維費用背包問題
P1507 NASA的食物計劃
模板題,就是01背包加一個限制條件
代碼:
HDU 2159 FATE
也是模板題,特殊在答案要求輸出最大忍耐度,所以在求dp的過程中,對dp>=n的情況記錄最低耐力值minn,然后用m-minn即可
代碼
分組背包
AreYouBusy
好題,綜合性還不錯題解+代碼
P1757 通天之分組背包
模板題,寫錯了一個地方卡了我好久。。
代碼:
HDU 1712 ACboy needs your help
模板題,稍微變變,n個課,一共m天,我們就分成n組,限制條件為m,每組內的元素分別就是1~m天,注意別出現負下標
代碼:
有依賴背包問題
(有待深入了解)
P1064 [NOIP2006 提高組] 金明的預算方案
P1064 [NOIP2006 提高組] 金明的預算方案
Consumer
總結
- 上一篇: 牛板筋的功效与作用、禁忌和食用方法
- 下一篇: P1064 [NOIP2006 提高组]