1. 程式人生 > 實用技巧 >多重揹包模板

多重揹包模板

多重揹包:

  1. 有N種物品和一個容量為V的揹包。第i種物品最多有numi件可用。
  2. 每件物品的重量是wi,價值是vi。
  3. 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。

#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; }

參考部落格https://www.cnblogs.com/FrankChen831X/p/11423350.html