題目:
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...