Submission #1254814

#TimeUsernameProblemLanguageResultExecution timeMemory
1254814orny_nabilaKnapsack (NOI18_knapsack)C++20
73 / 100
374 ms327680 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int32_t main() {

   int S, N;
   cin >> S >> N;
   vector<int>val(N);
   vector<int>wt(N);
   vector<int>k(N);
   map<int, vector<int>>m;
   for(int i = 0; i<N; ++i)
   {
       cin >> val[i] >> wt[i] >> k[i];
       int limit = min(S/wt[i], k[i]);
       for(int j = 0; j<limit; ++j)
       {
           m[wt[i]].push_back(val[i]);
       }
   }
   /*
   for(auto& [w, vals]:m)
   {
       cout << w << endl;
       for(int v : vals)
       {
           cout << v << " ";
       }
       cout << endl;
   }
   cout << endl;
   */
   vector<pair<int, int>>final_items;
   for(auto& [w, vals]: m)
   {
       int cnt = S/w;
       int sz = vals.size();
      // cout << "cnt: " << cnt << " sz: " << sz << endl;
       if(sz>cnt)
       {
           sort(vals.begin(), vals.end(), greater<>());
           vals.resize(cnt);
       }
       for(int it : vals)
       {
           final_items.push_back({w,it});
       }
   }
   /*
   for(auto& [i, j]: final_items)
   {
       cout << i << " " << j << endl;
   }
   */
   vector<int>dp(S+1, 0);
   for(auto& [it1, it2] : final_items)
   {
       for(int j = S; j>=it1; --j)
       {
           dp[j] = max(dp[j], dp[j-it1] + it2);
       }
   }
   cout << dp[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...