01揹包 完全揹包 多重揹包模板

2021-06-22 22:01:47 字數 1486 閱讀 4949

01揹包問題真的是最最基礎的,完全揹包就將01揹包的乙個迴圈順序顛倒了下,多重揹包就是在01揹包基礎上加了乙個迴圈。本文是在學習了《揹包九講》後的總結和實現,感謝大神寫的揹包指導。(多重揹包可以用二進位制來表示,不過不是很理解,先貼出最簡單的轉化為01揹包)

01揹包

#includeusing namespace std;

int max(int a,int b)

int p[1000]; //p為每個物品的價值

int w[1000]; //w為每個物品的體積

int f[1000]; //最大的總價值

int v; //揹包的容積

void zop(int cost,int weight)

int main()

for(i=1;i<=n;i++)

zop(w[i],p[i]);

cout《完全揹包

#includeusing namespace std;

int max(int a,int b)

int p[1000]; //p為每個物品的價值

int w[1000]; //w為每個物品的體積

int f[1000]; //最大的總價值

int v; //揹包的容積

void completep(int cost,int weight)

int main()

for(i=1;i<=n;i++)

completep(w[i],p[i]);

cout《多重揹包

#includeusing namespace std;

int max(int a,int b)

int p[1000]; //p為每個物品的價值

int w[1000]; //w為每個物品的體積

int bag[1000]; //第i種揹包有n[i]個

int f[1000]; //最大的總價值

int v; //揹包的容積

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

}int main()

for(i=1;i<=n;i++)

multiplepack(w[i],p[i],bag[i]);

cout《咋一看**都一樣,細節之處的差異還是等細心的你去發現。

多重揹包個人有個不理解之處:

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

}

第乙個for為什麼是 0 to n-1呢?按照第n個物品有n[i]個,且有n[i]+1種取法,不應該是 0 to n 嗎?

望大神指教下~

用以上模板妥妥的完成了hdoj 2191和hdoj 2602,很簡單~

多重揹包 完全揹包 01揹包模板

多重揹包問題 多重揹包問題限定了一種物品的個數,解決多重揹包問題,只需要把它轉化為0 1揹包問題即可。比如,有2件價值為5,重量為2的同一物品,我們就可以分為物品a和物品b,a和b的價值都為5,重量都為2,但我們把它們視作不同的物品。include using namespace std defin...

01揹包模板 完全揹包 and 多重揹包(模板)

模版就直接貼 01揹包模板 cpp view plain copy print?01揹包問題 01揹包問題的特點是,每種物品僅有一件,可以選擇放或不放。01揹包問題描述 有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量...

01揹包模板 完全揹包 and 多重揹包(模板)

01揹包模板 01揹包問題 01揹包問題的特點是,每種物品僅有一件,可以選擇放或不放。01揹包問題描述 有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。include define n 1050017...