題意:有n種物品,每件物品的價值為pr[i],體積為v[i],重量為w[i],數量為c[i]。現有乙個體積為v,最大可承受重量為w的揹包。問:怎麼樣選擇物品,使得揹包中的物品價值最大?
分析:這題其實與上一題差不多,思路是一樣的,只是多了一維,相應的記錄陣列也多一維就搞定。仍然是以二進位制的思想來進行優化。不過因為陣列變成了二維,所以陣列不能開得太大。其實,不管多重揹包變成多少維,解題的思路是一樣的,只是相應進行一些改變而已。所以理解01揹包的思想,再加上相應的靈活轉化就能搞定問題。
(我想如果維數達到一定的程度,這種方法就不適用了,因為陣列的維數大了,它的寬度就小了,這也就不一定能滿足所需。)
code:
#include
#include
#define n 600 //n 不能太大了
int max(int a, int b)
int main()
}c[i] -= j;
}j = c[i];
for(k = w; k >= j*w[i]; k--)}}
printf("%d\n",f[w][v]);
}}
HDU 2199 多重揹包轉化為01揹包
現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?輸入資料首先包含乙個正整數c,表示有c組測試用例,每組測試用例的第一行是兩個整數n和m 1 n 100,1 m 100 分別表示經費的金額和大公尺的種類,然...
多重揹包轉化為01揹包的方法與思路
多重揹包 多重揹包問題 給定n 種物品和乙個容量為 v的揹包,第 i種物品的質量為 weight i 價值為 value i 數量是 num i 件。可以任意選擇裝入揹包的物品,求裝入揹包中物品的總價值。這種問題和完全揹包一樣,可以直接套用01 揹包的動態規劃實現,可是很明顯效率太低,時間複雜度並沒...
0 1揹包,完全揹包,多重揹包, 二維費用揹包模板
0 1揹包,完全揹包,多重揹包,二維費用揹包模板 0 1揹包模板 每一件物品只有一件 void bag01 int cost,int weigth hdu 2159 fate 二維費用的揹包問題 有件物品,每一件物品具有兩種不同的費用,擁有這支付兩種的值為v1和v2 選擇一種物品時必須付出兩種代價 ...