Submission #1278987

#TimeUsernameProblemLanguageResultExecution timeMemory
1278987coderg300711Knapsack (NOI18_knapsack)C++20
12 / 100
2 ms572 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2024;
int n, s,dp[N]; 
priority_queue<int> pq[N];
vector<int> a[N];

void solve() {
    cin>>s>>n;
    for(int i=1;i<=n;i++) {
        int v,w,k; 
        cin>>v>>w>>k;
        k=min(k,s/w);
        while(k--) {
            pq[w].push(v);
            if((int)pq[w].size()>s/w)pq[w].pop();
        }
    }
    for(int w=1;w<=s;w++) {
        while(pq[w].size()) {
            a[w].push_back(pq[w].top());
            pq[w].pop();
        }
        reverse(a[w].begin(),a[w].end());
    }

    for(int w=1;w<=s;w++){
        for(int i=s;i>=w;i--) {
            int k=0,v=0;
            for(auto x:a[w]){ 
                k++;
                v+=x;
                if(i-w*k<0)break;
                dp[i]=max(dp[i],dp[i-w*k]+v);
            }
        }
    }
    cout<<dp[s]<<'\n';
}   

signed main() {
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

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