題目:有 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種策略 ...