多重揹包模板
阿新 • • 發佈:2020-08-10
多重揹包:
- 有N種物品和一個容量為V的揹包。第i種物品最多有numi件可用。
- 每件物品的重量是wi,價值是vi。
- 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 105; int n, m, need[maxn], value[maxn], num[maxn], dp[maxn]; //need是花費 //value是價值//num是數量 int main() { //n是種類,m是總錢數 scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) scanf("%d%d%d", &need[i], &value[i], &num[i]); for (int i = 1; i <= n; ++i) for (int j = m; j >= need[i]; --j) for (int k = 1; k <= num[i] && k*need[i] <= j; ++k) dp[j]= max(dp[j], dp[j - k * need[i]] + k * value[i]); printf("%d\n", dp[m]); return 0; }