有 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 ...