揹包問題模版

2021-07-11 08:46:03 字數 1236 閱讀 5603

一、01揹包:

#define n ..///n這個值是根據具體的題目來定的

int v;   ///v為總的容量

int dp[n];

void zeroonepack(int cost,int weight)

二、完全揹包:

#define n ..///n這個值是根據具體的題目來定的

int v; ///v為總的容量

int dp[n];

void completepack(int cost,int weight)

三、多重揹包:

#define n ..///n這個值是根據具體的題目來定的

int v; ///v為總的容量

int dp[n];

void multiplepack(int cost,int weight,int amount)

zeroonepack(amount*cost,amount*weight);

}}

這幾天看揹包問題看傷了,

自己太懶了,還是弄個模版吧(《揹包問題九講》)真是個好總結!

具體解釋——
舉個例子。 假如給了我們 價值為 2,但是數量卻是10 的物品,我們應該把10給拆開,要知道二進位制可是能夠表示任何數的,所以10 就是可以有1,2, 4,8之內的數把它組成,一開始我們選上 1了,然後讓10-1=9,再選上2,9-2=7,在選上 4,7-4=3,

而這時的3<8了,所以我們就是可以得出 10由 1,2,4,3,來組成,就是這個數量為1,2,3,4的物品了,那麼他們的價值是什麼呢,是2,4,6,8,也就說給我們的價值為2,數量是10的這批貨物,已經轉化成了價值分別是2,4,6,8元的貨物了,每種只有一件哎!!!!這就是二進位制優化的思想。

那為什麼會有完全揹包和01

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

模版 揹包問題彙總

寫在前面 多重揹包優化方案還有單調佇列優化 暫未實現 單調佇列優化參考 0 1揹包第二層迴圈為什麼倒序,完全揹包第二層迴圈為什麼正序 01揹包模版 include include include using namespace std define maxsize 100010 注意最大物品數的修改...

多重揹包模版

下面就是多重揹包的原題 借用洛谷的 終於,破解了千年的難題。小ff找到了王室的寶物室,裡面堆滿了無數價值連城的寶物 這下小ff可發財了,嘎嘎。但是這裡的寶物實在是太多了,小ff的採集車似乎裝不下那麼多寶物。看來小ff只能含淚捨棄其中的一部分寶物了 小ff對洞穴裡的寶物進行了整理,他發現每樣寶物都有一...

揹包問題 01揹包問題

n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...