動態規劃之揹包九講之三 多重揹包

2021-10-05 17:36:57 字數 994 閱讀 6247

題目:有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi,wi,si,用空格隔開,分別表示第 i 種物品的體積、價值和數量。

輸出格式

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

資料範圍

0i,wi,si≤100

解析:本題資料範圍較小,可以在o(n3)複雜度內解決。用多重揹包最初版本

code:

#include

#include

using

namespace std;

const

int n =

110;

int f[n]

;int

main()

}}cout<;return0;

}

多重揹包二進位制優化版本

若本題資料範圍從100擴大至1000,則o(n3)會tle,所以需要進行優化。

code:

#include

#include

#include

using

namespace std;

const

int n =

2010

;int f[n]

;struct thing

;vector things;

intmain()

);}if

(s >

0) things.

push_back()

;}for(

auto thing : things)

} cout<;return0;

}

揹包九講之三(多重揹包)

證明如下 係數可取值 1,2,4,2 k 1 n i 2 k 1,k是使得n i 2 k 1 0的最大整數 前n項和為2 k 1,那麼最後一項為 n i 2 k 1 這些係數之和為n i 且0 n i 間的每乙個整數均可以用若干個係數的和表示 證明如下 先證明區間0.2 k 1,我們有係數1,2,4...

揹包九講 三 多重揹包問題

有n種物品和乙個容量為v的揹包,每種物品都有m im i mi 件可用,放入第i件物品的費用是c ic i ci 得到的價值是w iw i wi 求解將哪些物品裝入揹包可使價值綜合最大。如果看過之前的完全揹包問題,這裡的多重揹包問題應該就能秒殺了,當時考慮過將完全揹包轉化為01揹包問題求解,而多重揹...

揹包九講之多重揹包

揹包九講原文 有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。這題目和完全揹包問題很類似。基本的方程只需將完全揹包問題的方程略微一改即可,因為對於第i種物品有n i 1種策略 ...