01揹包,完全揹包,多重揹包模板及例題

2021-09-11 17:30:22 字數 2197 閱讀 5628

//每個物品的重量

vectorweight;

//每個物品的價值

vectorvalue;

//每個物品的數量

vectornums;

//揹包的總重量

int all;

//多少種物品

int n;

vector> dp(n + 1, vector(all + 1, 0));

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

}

優化版本

vectordp(all + 1, 0);

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

//寫法二

for (int j = all; j >= weight[i]; j--)

}

例題:

答案:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

int main()

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

vector> dp(n + 1, vector(allv + 1, 0));

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

}cout << dp[n][allv] << endl;

}return 0;

}int main()

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

vectordp(allv + 1, 0);

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

}cout << dp[allv] << endl;

}return 0;

}

vector> dp(n + 1, vector(all + 1, 0));

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

}}

優化版本

vectordp(n + 1, 0);

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

//寫法二

for (int j = weight[i]; j <= all; j++)

}

例題:

答案:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

/*超時

int main()

vector> dp(n + 1, vector(all + 1, inf));

for (int i = 0; i <= n; i++)

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

int min = inf;

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

if(min >= inf)

cout << "this is impossible." << endl;

else

}return 0;}*/

int main()

vectordp(all + 1, inf);

dp[0] = 0;

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

}int min = min(inf, dp[all]);

if (min >= inf)

cout << "this is impossible." << endl;

else

}return 0;

}

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

}vectordp(weight.size() + 1, 0);

for (int i = 1; i < weight.size(); i++)

}

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

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

多重揹包 完全揹包 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 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量...