第二天叫醒我的不是鬧鐘,是夢想!
有 n 種物品和乙個容量是 v 的揹包。
物品一共有三類:
第一類物品只能用1次(01揹包);
第二類物品可以用無限次(完全揹包);
第三類物品最多只能用 si 次(多重揹包);
每種體積是 vi,價值是 wi。
求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。
輸出最大價值。
輸入格式
第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。
接下來有 n 行,每行三個整數 vi,wi,si,用空格隔開,分別表示第 i 種物品的體積、價值和數量。
si=−1 表示第 i 種物品只能用1次;
si=0 表示第 i 種物品可以用無限次;
si>0 表示第 i 種物品可以使用 si 次;
輸出格式
輸出乙個整數,表示最大價值。
//可以把第三類物品用二進位制優化轉化為0/1揹包
資料範圍
0.h>
using namespace std;
const int n
=1100
;int n,m;
int dp[n]
;struct node
;vector res;
int main()
);else
if(s==
0) res.
push_back()
;else);
}if(s>
0) res.
push_back()
;}}for
(auto ans :res)
} cout<<}
混合揹包(模板)
額,鑑於寫的文章太少,本來這一篇可以加在一起原來的揹包彙總中,但是,那樣太長啦,就分開寫一下 順便加一點原創量,我太卑微啦 想看一下其他的揹包板子戳一戳 揹包彙總 ok,進入正題 所謂混合揹包就是,題目中的物品既有限定數目的物品,也有可以無限次使用的物品,揹包的體積還是定值,這就需要我們,分開討論一...
模板練習 混合揹包
這次練習的是揹包模板 根據三種情況分別處理 把多重揹包轉換成01揹包處理 一開始寫的時候 思路偏了 把多重揹包 分成了1 w i 2 w i p i w i 這樣的情況 然後再當01揹包來寫的 結果不用多說了 改回來的時候又忘了改變量名 感覺自己宛如乙個智障 include include incl...
混合揹包問題
如果將p01 p02 p03混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?考慮到在p01和p02中給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一次,另一類物品可以取無限次,那麼只需在對每個物...