AC 5 多重揹包問題 II

2022-05-01 23:36:13 字數 1070 閱讀 8603

多重揹包優化(二進位制)

/*1.怎麼把多重揹包問題轉換為01揹包問題

v,w拆開重複s份放到陣列裡面去,每個物品只能用一次

=> 二進位制拆法

7 7以內選多少個數可以使得7中所有的數都可以組合出來 0-7

1 1 1 1 1 1 1

1 2 401

23 = 1 + 2

4 = 4

5 = 1 + 4

6 = 2 + 4

7 = 1 + 2 + 4

給定乙個數s,用多少個數可以表示小於等於s的所有數 答案 log2(s)上取整

s = 10

1 2 4 3

1 2 7 :0-7

3: 0-10

s - 1 - 2 - 4 - 8 分成了log(s)份

1000*log(2000)*2000 = 1000*11*2000 = 2 * 10^7

*/#include

#include

#include

#include

using

namespace

std;

const

int num = 2010

;int

n, v;

intdp[num];

//定義結構體 v體積,w表示**

struct

good;

intmain()

);//

放到物品組中去

}

if (n>0

) goods.push_back();//

剩餘的}

//01揹包求最大價值

for(auto good:goods)

for (int j = v; j >= good.v; j--)

cout

<< dp[v] <

return0;

}

多重揹包問題 II

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...

多重揹包問題II

多重揹包問題ii 總體積是m,每個小物品的體積是a i 每個小物品的數量是b i 每個小物品的價值是c i 求能夠放入揹包內的最大物品能夠獲得的最大價值 和上乙個很類似 上一題體積就是價值,這裡的價值是單獨定義了 狀態轉移方程 不放a i f i j f i 1 j 放a j 可放多個設為k,k m...

多重揹包問題 II

有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi...