Submission #1184867

#TimeUsernameProblemLanguageResultExecution timeMemory
1184867Godgift42Knapsack (NOI18_knapsack)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main(){
    int n,s;
    cin >> s >> n;
    map<int,vector<pair<ll,int>>> bw;
    for(int i=0;i<n;i++){
        ll v;
        int w,k;
        cin >> v >> w >> k;
        if(w<s and k>0)bw[w].push_back({v,k});
    }
    vector<vector<ll>> dp(bw.size()+1,vector<ll>(s+1,-1));
    dp[0][0]=0;
    int at=0;
    ll ans=0;
    for(auto &[w,items]:bw){
        at++;
        sort(items.begin(),items.end(),greater<pair<ll,int>>());
        for(int l=0;l<=s;l++){
            dp[at][l]=dp[at-1][l];
            int cr=0;
            int id=0;
            int cur=0;
            ll pr=0;
            while(id<items.size() and (cr+1)*w<=l){
                cr++;
                cur++;
                pr+=items[id].first;
                if(dp[at-1][l-cr*w]!=-1)dp[at][l]=max(dp[at][l],dp[at-1][l-cr*w]+pr);
                if(cur==items[id].second){
                    cur=0;
                    id++;
                }
            }
            ans=max(ans,dp[at][l]);
        }
    }
    cout << *max_element(dp.back().begin(), dp.back().end()) << endl;
}
#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...