C++ 背包问题求解:01 背包、完全背包和多重背包
#include
const int N = 1010;
int n, m; int v[N], w[N], s[N]; int f[N];
int main() { cin >> n >> m; for (int i = 1; i <= n; i ++ ) { cin >> v[i] >> w[i] >> s[i]; if (s[i] >= 0) //多重背包 { for (int j = m; j >= 0; j -- ) for (int k = 0; k <= s[i] && k * v[i] <= j; k ++ ) f[j] = max(f[j], f[j - k * v[i]] + k * w[i]); } else if (s[i] == -1) //01背包 { for (int j = m; j >= v[i]; j -- ) f[j] = max(f[j], f[j - v[i]] + w[i]); } else //完全背包 { for (int j = v[i]; j <= m; j ++ ) f[j] = max(f[j], f[j - v[i]] + w[i]); } } cout << f[m] << endl; return 0; }
原文地址: https://www.cveoy.top/t/topic/l34Z 著作权归作者所有。请勿转载和采集!