9928 混合揹包

2021-09-28 10:09:32 字數 870 閱讀 3727

time limit: 1 second

memory limit: 128 mb

乙個旅行者有乙個最多能用v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,...,wn,它們的價值分別為c1,c2,...,cn。

有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。

求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

【樣例解釋】

選第一件物品1件和第三件物品2件。 

第一行:二個整數,v(揹包容量,v<=200),n(物品數量,n<=30);

第2..n+1行:每行三個整數wi,ci,pi,前兩個整數分別表示每個物品的重量,價值,第三個整數若為0,則說明此物品可以購買無數

件,若為其他數字,則為此物品可購買的最多件數(pi)。

僅一行,乙個數,表示最大總價值。

10 3

2 1 0

3 3 1

4 5 4

11
【題解】

遇到0的時候j層迴圈就從w[i]..m進行更新。

遇到不是0就從m..0進行迴圈。然後再巢狀一層k迴圈用來列舉放入幾個物品。

一定要注意先用j迴圈再k迴圈,因為如果先k迴圈。會無法確定我們更新的值用了幾個物品。會可能超過最大上限。

【**】

#include int m,n,w[40],c[40],num[40],f[250];

void input_data()

void get_ans()

}}void output_ans()

int main()

混合揹包 分組揹包

啥是混合揹包呢,就是包含01揹包,完全揹包,多重揹包。有n件物品,揹包承重最大為m,w i 代表重量,v i 代表價值,s i 代表種類。s i 1,可用1次,s i 0,可用無限次,s i 0,可用s i 次.解法 見 const int maxn 1e4 5 int n,m,dp m 1 w n...

混合揹包問題

如果將p01 p02 p03混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?考慮到在p01和p02中給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一次,另一類物品可以取無限次,那麼只需在對每個物...

混合揹包問題

name 混合揹包問題 author 巧若拙 date 07 06 18 09 33 description 混合揹包問題 在n種物品中選取若干件放在容量為c的揹包裡,分別用p i 和w i 儲存第i種物品的價值和重量。有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的...