多重揹包二進位制優化

2021-07-25 08:53:30 字數 891 閱讀 8403

多重揹包二進位制優化:

將價值數量相同的物品分成1,2,4,8.。。因為100以內任何數都可以由幾個2的n次方數組成。所以,有遍歷沒乙個數變為遍歷每乙個2的n次方數。

例題:

有n種物品,每種物品的數量為c1,c2......cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2......wn(wi為整數),與之相對應的價值為p1,p2......pn(pi為整數)。求揹包能夠容納的最大價值。

input

第1行,2個整數,n和w中間用空格隔開。n為物品的種類,w為揹包的容量。(1 <= n <= 100,1 <= w <= 50000)

第2 - n + 1行,每行3個整數,wi,pi和ci分別是物品體積、價值和數量。(1 <= wi, pi <= 10000, 1 <= ci <= 200)

output

輸出可以容納的最大價值。
input示例

3 6

2 2 5

3 3 8

1 4 1

output示例

9

#include#include#includeusing namespace std;

const int maxm = 50005;

int dp[maxm] = , w[105], v[105], c[105];

int main()

for (j = v;j >= c[i] * v[i];j--)

dp[j] = max(dp[j], dp[j - c[i] * v[i]] + c[i] * w[i]);

} printf("%d\n", dp[v]);

return 0;

}

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

馬上就要輕院校賽了,沒時間了,下面是網上找的多重揹包,感覺很好 void zeroonepack int cost,int weight,int n void completepack int cost,int weight,int n void multipack int c,int w,int ...

多重揹包二進位制優化

時間長不寫 感覺變菜了。整體優化思路和快速冪很相近 如果第i個物品有num i 個,花費是 c i 價值是 v i 那麼我們可以把它拆分成數個物品。比如某個物品數量是14 花費是cost 價值是value 1 2 4 7 就可以把14個相同物品看成 4 個不同的物品,物品 數量花費 價值第乙個 11...

二進位制優化多重揹包

優化多重揹包的方式中兩種常用的是單調佇列和二進位制優化,今天主要學習了一下二進位制優化 徵集各方資料 先說下 01 揹包,有n 種不同的物品,每個物品有兩個屬性 size 體積,value 價值,現在給乙個容量為 w 的揹包,問 最多可帶走多少價值的物品。int f w 1 f x 表示揹包容量為x...