Submission #1271341

#TimeUsernameProblemLanguageResultExecution timeMemory
1271341tinyfoldKnapsack (NOI18_knapsack)C++20
100 / 100
88 ms2888 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2100;
vector<pair<int, int>> vecs[N];
int dp[N];
int k, n, x, y, z;

void solve(int x, int y) {
    for (int i = k; i >= x; i--) {
        dp[i] = max(dp[i], dp[i - x] + y);
    }
}

signed main() {
    cin >> k >> n;
    while (n--) {
        cin >> x >> y >> z;
        vecs[y].push_back({x, z});
    }
    for (int i = 1; i <= k; i++) {
        sort(vecs[i].begin(), vecs[i].end());
        for (int j = 1; j <= k / i && vecs[i].size(); j++) {
            solve(i, vecs[i].back().first);
            if (!--vecs[i].back().second) vecs[i].pop_back();
        }
    }
    cout << dp[k] << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...