#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int s, n, a, b, c;
ll dpupd[2005], dpold[2005];
int cval[2005];
int main() {
cin.tie(0) -> sync_with_stdio(0);
cin >> s >> n;
for(int i=1;i<=n;i++) {
cin >> a >> b >> c;
memset(cval, 0, sizeof cval);
for(int cw = 0; cw + b <= s; cw++) {
if(cval[cw] != c) {
if(dpold[cw+b] < dpupd[cw] + a) {
dpupd[cw+b] = dpupd[cw] + a;
cval[cw+b] = cval[cw] + 1;
} else {
dpupd[cw+b] = dpold[cw+b];
cval[cw+b] = 0;
}
} else {
if(dpold[cw] >= dpupd[cw] - a) {
//use dpold
if(dpold[cw+b] < dpold[cw] + a) {
dpupd[cw+b] = dpold[cw] + a;
cval[cw+b] = 1;
} else {
dpupd[cw+b] = dpold[cw+b];
cval[cw+b] = 0;
}
} else {
//use dp new
if(dpupd[cw+b] < dpupd[cw]) {
dpupd[cw+b] = dpupd[cw];
cval[cw+b] = c;
} else {
dpupd[cw+b] = dpold[cw+b];
cval[cw+b] = 0;
}
}
}
}
for(int k=0;k<2005;k++) dpold[k] = dpupd[k];
}
cout << dpold[s];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |