#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 2E3 + 1;
vector <vector <pair <int, int>>> g(maxn + 1);
int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    int s, n;
    cin >> s >> n;
    for(int i = 1; i <= n; i++) {
        int v, w, k;
        cin >> v >> w >> k;
        k = min(k, s);
        g[ w ].push_back( {v, k} );
    }
    vector <int64_t> dp(s + 61, LLONG_MIN);
    dp[0] = 0LL;
    for(int w = 1; w <= s; w++) {
        int cnt = s / w, cur = 0;
        sort(g[w].begin(), g[w].end());
        reverse(g[w].begin(), g[w].end());
        while(cnt-- && cur < g[w].size()) {
            for(int j = s; j >= w; j--) {
                dp[j] = max(dp[j], dp[j - w] + (int64_t)g[w][cur].first);
            }
            g[w][cur].second--;
            if(g[w][cur].second == 0) cur++;
        }
    }
    cout << *max_element(dp.begin(), dp.end());
}
| # | 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... |