You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.1 KiB

#include <bits/stdc++.h>
#define v first
#define w second
using namespace std;
typedef pair<int, int> PII;
const int N = 70, M = 30010;
int n, m, f[M];
PII master[N];
vector<PII> servent[N];
int main() {
cin >> m >> n;
for (int i = 1; i <= n; i++) {
int v, w, q;
cin >> v >> w >> q;
if (q == 0)
master[i] = {v, v * w};
else
servent[q].push_back({v, v * w});
}
for (int i = 1; i <= n; i++)
if (master[i].v) {
for (int j = m; j >= 0; j--) {
auto &sv = servent[i];
for (int k = 0; k < 1 << sv.size(); k++) {
int v = master[i].v, w = master[i].w;
for (int u = 0; u < sv.size(); u++)
if (k >> u & 1) {
v += sv[u].v;
w += sv[u].w;
}
if (j >= v) f[j] = max(f[j], f[j - v] + w);
}
}
}
cout << f[m] << endl;
return 0;
}