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...