0. 前言
相关:
1. 多重背包裸题
多重背包裸题,在此分析下时间复杂度即可。
- 计算量
n*m*s
为3e7
的计算量,朴素的多重背包就能过了
一维代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 6005;
int n, m;
int f[N];
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
int v, w, s;
cin >> v >> w >> s;
for (int j = m; j >= v; --j)
for (int k = 0; k * v <= j && k <= s; ++k)
f[j] = max(f[j], f[j - k * v] + k * w);
}
cout << f[m] << endl;
return 0;
}