Submission #1178767

#TimeUsernameProblemLanguageResultExecution timeMemory
1178767petezaKnapsack (NOI18_knapsack)C++20
100 / 100
35 ms1608 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

ll dp[2005];
vector<pair<int, int>> vec[2005];

int s, n;
int val, wei, amo;
int touse[2005];

void upd(ll val, ll x) {
    for(int i=s-x;i>=0;i--) {
        dp[i+x] = max(dp[i+x], dp[i] + val);
    }
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin >> s >> n;
    for(int i=0;i<n;i++) {
        cin >> val >> wei >> amo;
        vec[wei].emplace_back(val, amo);
    }
    for(int i=0;i<=s;i++) sort(vec[i].begin(), vec[i].end());
    for(int i=1;i<=s;i++) touse[i] = (s+i-1)/i;
    for(int i=1;i<=s;i++) {
        //cout << touse[i] << ' ';
        while((touse[i]--) && !vec[i].empty()) {
            upd(vec[i].back().first, i);
            if(!(--vec[i].back().second)) vec[i].pop_back();
        }
        //for(int i=0;i<=s;i++) cout << dp[i] << ' ';
        //cout << '\n';
    }
    cout << dp[s];
}
#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...