#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
using P = pair<int, int>;
#define all(x) x.begin(), x.end()
#define rep(i, l, n) for (int i = l; i < (n); ++i)
#define sz(x) (int)x.size()
const char nl = '\n';
const int mod = 1e9+7;
struct node {
int v, w, k;
};
void solve() {
int s, n; cin >> s >> n;
vector<node> a(n);
for (auto &i: a)cin >> i.v >> i.w >> i.k;
sort(all(a), [](const node& x, const node& y) {
return x.v > y.v;
});
int dp[2][s+1];
memset(dp, 0, sizeof dp);
int sum =0, now = 1;
rep(i, 0, n) {
sum += a[i].w*a[i].k;
for (int j = min(s, sum); j >= 1; --j)dp[now][j] = dp[1-now][j];
for (int k = s-a[i].w; k >= 0; k--) {
for (int p = (k+a[i].w); p <= min(sum, s); p += a[i].w) {
int mn = min((p-k)/a[i].w, a[i].k);
dp[now][p] = max(dp[now][p], (i-1>=0?dp[1-now][k]:0ll)+mn*a[i].v);
if ((p-k)/a[i].w >= a[i].k)break;
}
}
rep(j, 1, min(s, sum)+1)dp[now][j] = max(dp[now][j], dp[now][j-1]);
//}
now = 1-now;
}
int res = 0;
rep(i, 0, s+1)res = max(res, dp[n%2][i]);
cout << res << nl;
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
| # | 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... |