Submission #1324205

#TimeUsernameProblemLanguageResultExecution timeMemory
1324205theoneandonlytronKnapsack (NOI18_knapsack)C++20
100 / 100
38 ms2972 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

struct Item{
    ll v, k;
};

void solve(){
    int s,n;
    cin >> s >> n;
    vector <vector <Item>> l1(s+1);
    for (int i = 0; i < n; i++){
        ll v,w,k;
        cin >> v >> w >> k;
        l1[w].push_back({v,k});
    }
    vector <vector <ll>> final(s+1);
    for (int i = 1; i <= s; i++){
        sort(l1[i].begin(), l1[i].end(), [](Item &a, Item &b){
            return a.v > b.v;
        });
        int counter = 0;
        int cur = 0;
        for (int j = 0; j < (int)l1[i].size(); j++){
            while (cur < l1[i][j].k && counter < (s/i)){
                counter += 1;
                cur += 1;
                final[i].push_back(l1[i][j].v);
            }
            cur = 0;
        }
    }
    vector <ll> dp(s+1,0);
    for (int i = 1; i <= s; i++){
        for (auto &p : final[i]){
            for (int j = s; j >= i; j--){
                dp[j] = max(dp[j],dp[j-i] + p);
            }
        }
    }
    cout << dp[s] << "\n";
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    solve();

    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...