Submission #1219585

#TimeUsernameProblemLanguageResultExecution timeMemory
1219585sam230609Knapsack (NOI18_knapsack)C++20
100 / 100
84 ms5188 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
ll s,n,v[100001],w[100001],k[100001],maxV=0,f[2001];
vector<pair<ll,ll>> a[2001];
int main(){
    cin >>s>>n;
    for(ll i=1;i<=n;i++) cin >>v[i]>>w[i]>>k[i],maxV=max(maxV,k[i]);
    memset(f,0,sizeof(f));
    for(ll i=1;i<=n;i++) a[w[i]].push_back({v[i],k[i]});
    for(ll i=0;i<=s;i++){
        if(a[i].size()==0) continue; ll pos=0;
        sort(a[i].begin(),a[i].end(),greater<pair<ll,ll>>());
        for(ll j=0;j*i<s;j++){
            if(pos>=a[i].size()) break;
            for(ll k=s;k>=i;k--) f[k]=max(f[k],f[k-i]+a[i][pos].fi);
            a[i][pos].se--; if(a[i][pos].se==0) pos++;
        }
    }cout <<f[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...