NEUOJ1907 有限制的揹包問題

2022-10-11 11:18:08 字數 562 閱讀 9263

題意:將n種物品放入最大容量為w的揹包中,其中每一種物品的價值為vi,體積為wi,數量為ci,問該揹包所能裝下的最大價值為多少。

思路:經典的多重揹包問題,由於ci的資料範圍較大,所以正常使用多重迴圈將多重揹包改為有 n*ci 個物品的01揹包問題會超時。此時我們需要一種巧妙的方法來優化拆分的思路,由於自然數範圍內所有的數都可以用二進位制來表示,所以我們可以將 \(c_i\) 拆分為 \(1 + 2 + 4 + 8 + ... + x\) 的形式。

具體拆分思路請看如下樣例:

當我們試圖將5拆分成二進位制表示時,應當將其拆分為1,2,2,這樣的拆分可以用這3個數表示出1~5中所有的可能,

再例如說我們試圖拆分1000時,應將其拆分為1,2,4,8,16,32,64,128,256,489。

在了解完二進位制的拆分思路後,外層迴圈從 n*ci 被優化為了 nlogn ,此時該題便迎刃而解了。

**如下:

for(int i = 0; i < n; i++) 

//可能會多出來一部分,也要算進去

if(c[i])

}

多重揹包的 二進位制優化 轉化為有限制的完全揹包

多重揹包 有n種物品,每個物品的重量為w i 每個物品的價值為h i 每種物品有c i 個。最樸素的做法中,我們把c i 個物品i看成c i 個不同的物品,進而轉化成了0 1揹包。然後在0 1揹包的基礎上我們還可以進行二進位制優化 我們知道 20,21,22,23,2n可以組成1 2 n 1 1中的...

計蒜客 節食的限制(01揹包)

bessie像她的諸多姊妹一樣,因為從farmer john的草地吃了太多美味的草而長出了太多的贅肉。所以fj將她置於乙個及其嚴格的節食計畫之中。她每天不能吃多過h 5 h 45,000 公斤的乾草。bessie只能吃一整捆乾草 當她開始吃一捆乾草的之後就再也停不下來了。她有乙個完整的n 1 n 5...

計蒜客 節食的限制(01揹包)

bessie像她的諸多姊妹一樣,因為從farmer john的草地吃了太多美味的草而長出了太多的贅肉。所以fj將她置於乙個及其嚴格的節食計畫之中。她每天不能吃多過h 5 h 45,000 公斤的乾草。bessie只能吃一整捆乾草 當她開始吃一捆乾草的之後就再也停不下來了。她有乙個完整的n 1 n 5...