5 多重揹包問題 II 用二進位制優化

2021-09-14 00:14:00 字數 1047 閱讀 8290

有 nn 種物品和乙個容量是 vv 的揹包。

第 ii 種物品最多有 sisi 件,每件體積是 vivi,價值是 wiwi。

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

輸出最大價值。

輸入格式

第一行兩個整數,n,vn,v,用空格隔開,分別表示物品種數和揹包容積。

接下來有 nn 行,每行三個整數 vi,wi,sivi,wi,si,用空格隔開,分別表示第 ii 種物品的體積、價值和數量。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

本題考查多重揹包的二進位制優化方法。

輸入樣例

4 5

1 2 3

2 4 1

3 4 3

4 5 2

輸出樣例:

10
普通的多重揹包會超時,這是用二進位制優化的方法

例如 總數是7 可以用二進位制優化後 7 = 1 + 2 + 4;那麼 1,2,  4就可以表示所有 [1 ,7]的數

例如 總數是10 那麼 10 = 1 + 2 + 4 + 3 ,用1,2 ,4,3就可以表示所有【1,10】的數

這樣比直接暴力快

#include#define pb push_back

using namespace std;

const int n = 2005;

int w[n],v[n],s[n];

int dp[n];

struct node ;

vectorg;

int main());

s -= k;

}if(s) g.pb((node));

}for(int i = 0; i < g.size(); i++)

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

}

用二進位制優化多重揹包問題

多重揹包是這樣的乙個問題 有n種物品,第i種物品的體積為ci,價值是wi,但是每種物品的數量都是有限的,為ni。現在有容量為v的揹包,請你放入若干物品,使獲得的價值盡量大。樸素演算法 把n種物品逐個拆分,得到 ni個物品,則原問題可轉化為01揹包求解。這樣做的時間複雜度為o v n 或者是在列舉種類...

多重揹包二進位制優化

多重揹包二進位制優化 將價值數量相同的物品分成1,2,4,8.因為100以內任何數都可以由幾個2的n次方數組成。所以,有遍歷沒乙個數變為遍歷每乙個2的n次方數。例題 有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相...

多重揹包(二進位制優化)

馬上就要輕院校賽了,沒時間了,下面是網上找的多重揹包,感覺很好 void zeroonepack int cost,int weight,int n void completepack int cost,int weight,int n void multipack int c,int w,int ...