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