多重揹包(二進位制模板 普通解法)

2022-08-11 13:24:12 字數 1172 閱讀 3393

題目:

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;

7const

int max = 100 + 10;8

intv;

9int

f[max],price[max],weight[max],amount[max];

10void onezeorpage(int cost, int

weight)

1115

void completepage(int cost, int

weight)

1621

void multiplepage(int cost,int weight,int

amount)

2228

int k = 1;29

while(k

3035

if(amount > 0

)36 onezeorpage(amount * cost, amount *weight);

37return;38

}39intmain()

4054

return0;

55 }

二進位制優化

那為什麼會有完全揹包和01 揹包的不同使用加判斷呢?原因也很簡單啊,當資料很大,大於揹包的容納量時,我們就是在這個物品中取上幾件就是了,取得量時不知道的,也就理解為無限的啦,這就是完全揹包啦,反而小於容納量的就是轉化為01揹包來處理就是了,可以大量的省時間。

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;

7const

int max = 100 + 10;8

intv;

9int

f[max],price[max],weight[max],amount[max];

10int

main()

1129}30

}31 printf("

%d\n

",f[n]);32}

33return0;

34 }

樸素的演算法

多重揹包二進位制優化

多重揹包二進位制優化 將價值數量相同的物品分成1,2,4,8.因為100以內任何數都可以由幾個2的n次方數組成。所以,有遍歷沒乙個數變為遍歷每乙個2的n次方數。例題 有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相...

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

馬上就要輕院校賽了,沒時間了,下面是網上找的多重揹包,感覺很好 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...