Submission #1331933

#TimeUsernameProblemLanguageResultExecution timeMemory
1331933piolkKnapsack (NOI18_knapsack)C++20
73 / 100
1095 ms16932 KiB
#include <bits/stdc++.h>
using namespace std;

int s,n;

inline int iinput(){
    int a=0;
    int c=getchar_unlocked();

    while (c<'0' || c>'9') c=getchar_unlocked();
    while (c>='0' && c<='9'){
        a=a*10 + c-'0';
        c=getchar_unlocked();
    }
    return a;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    //cin>>s>>n;
    s=iinput(),n=iinput();

    vector<pair<long long,long long>> l;
    for (int i=0;i<n;i++){
        long long v,w,k;
        //cin>>v>>w>>k;
        v=iinput(),w=iinput(),k=iinput();
        
        long long j=1;
        while (j<=k){
            l.push_back({j*v,j*w});
            k-=j;
            j<<=1;
        }

        if (k>0) l.push_back({k*v,k*w});
    }

    vector<long long> dp(s+7,-1); //max value with weight
    dp[0]=0;

    for (auto [v,w]:l){
        for (int i=s;i>=w;i--){
            if (dp[i-w]==-1) continue;
            dp[i]=max(dp[i],dp[i-w]+v);
        }
    }

    long long ans=0;
    for (int i=0;i<=s;i++) ans=max(ans,dp[i]);

    cout<<ans<<"\n";

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