Submission #1363289

#TimeUsernameProblemLanguageResultExecution timeMemory
1363289deepak23232Knapsack (NOI18_knapsack)C++20
100 / 100
916 ms68396 KiB
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

#define int long long


void solve() {
    int s,n;
    cin>>s>>n;
    vector<int> prices(n);
    vector<int> size(n);
    vector<int> copies(n);

    for(int i=0; i<n; i++){
        cin>>prices[i];
        cin>>size[i];
        cin>>copies[i];
    }

    vector<pair<int,int>>items;

    for(int i=0; i<n; i++){
        int val = prices[i];
        int w = size[i];
        int c = copies[i];
        
        for(int k=1; k<=c; k*=2){
            items.push_back({k*w,k*val});
            c -= k;
        }
        if(c>0){
            items.push_back({c*w,c*val});

        }
    }

    vector<int> dp(s+1,LLONG_MIN);
    dp[0] = 0;

    for(auto &pr : items){
            for(int j=s; j>=pr.first; j--){
                if (dp[j - pr.first] != LLONG_MIN){
                dp[j] = max(dp[j],pr.second+dp[j-pr.first]);
                }
            }
    }
    cout<<*max_element(dp.begin(),dp.end())<<endl;
}

signed main() {
    int t=1;
    // cin>>t;
    while (t--) {
        solve();
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...