混合揹包問題 模板

2021-09-29 13:07:38 字數 926 閱讀 9337

第二天叫醒我的不是鬧鐘,是夢想!

有 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中給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一次,另一類物品可以取無限次,那麼只需在對每個物...