DP 混合揹包 HUSTOJ2822

2021-08-18 16:54:00 字數 761 閱讀 3757

乙個旅行者有乙個最多能裝v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,...,wnw1,w2,...,wn

,它們的價值分別為c1,c2,...,cnc1,c2,...,cn

。有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

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

第2..n+1行:每行三個整數wi,ci,piwi,ci,pi,前兩個整數分別表示每個物品的重量,價值,第三個整數若為0,則說明此物品可以購買無數件,若為其他數字,則為此物品可購買的最多件數(pipi)。

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

10  3

2 1 0

3 3 1

4 5 4

11

#include using namespace std;

int dp[210];

int w[30], c[30], p[30];

int main()

for ( int j = m; j >= w[i]*t; j-- )

dp[j] = max ( dp[j], dp[j - t * w[i]] + c[i] * t );

} cout << dp[m] << endl;

return 0;

}

hdu 2844 混合揹包 揹包dp

題意 有n種紙幣面額 a1,a2,an 每種面額對應有 c1,c2,cn 張。問這些錢能拼成1 m中多少種值。題解 揹包dp問題。若ci 1,是01揹包,若ci ai m則是完全揹包,否則是多重揹包。詳見 揹包九講 先複習一下三種簡單揹包形式 01揹包 f v max 完全揹包 f i,v max ...

混合揹包 經典DP問題

有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi,wi,si,用空格隔開,分別表示第 i 種物品...

P1833 櫻花 揹包DP 多重揹包 , 混合揹包

混合揹包是指很多種揹包一起做。此題屬於多重揹包的模板題 思想是統統轉化為01揹包 題目中有01揹包 p 1 完全揹包 p 0 多重哦揹包 p k 完全揹包,只需將p t w 多重揹包,只需進行二進位制拆分 注意陣列開大 int readint while ch 0 ch 9 return x f l...