Submission #1212515

#TimeUsernameProblemLanguageResultExecution timeMemory
1212515cubedKnapsack (NOI18_knapsack)C++20
37 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define endl '\n'
 
const int MOD = 1e9+7;
const int inf =1e9;

bool multi=false;

int main()
{

    ll t=1;
    if (multi) cin>>t;
 
    while (t--) {
        int s, n;
        cin>>s>>n;

        vector<pair<int, int>> items;
        for (int i=0; i<n; i++) {
            int v,w,k;
            cin>>v>>w>>k;

            for (int p=1; k>0; p<<=1) {
                int cnt = min(p, k);
                items.push_back({v*cnt, w*cnt});
                k-=cnt;
            }
        }

        vector<int> prev(s+1, 0), curr(s+1, 0);

        for (int i=0; i<=s; i++) {
            if (i>=items[0].second) prev[i]=items[0].first;
        }

        for (int i=1; i<items.size(); i++) {
            for (int j=0; j<=s; j++) {
                int take=0;
                if (j>=items[i].second) take=items[i].first+prev[j-items[i].second];
                int notake=prev[j];

                curr[j]=max(take, notake);
            }

            swap(prev, curr);
        }

        cout<<prev[s];
    }
 
    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...