Submission #906293

#TimeUsernameProblemLanguageResultExecution timeMemory
906293nicyzkKnapsack (NOI18_knapsack)C++14
100 / 100
202 ms248004 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 1e18

void solve() {
    ll S,N; cin>>S>>N; 
    map<ll,vector<pair<ll,ll>>> m; // wt: [[val,cnt]]
    for (ll i=0; i<N; i++) {
        ll V,W,K; cin>>V>>W>>K; 
        m[W].push_back({V,K}); 
    }
    for (auto &x: m) {
        sort(x.second.rbegin(), x.second.rend()); 
    }
    vector<pair<ll,ll>> items; 
    for (auto x:m) {
        ll wt = x.first; 
        ll cnt = S/wt; 
        ll done = 0; 
        for (ll i=0; i<x.second.size(); i++) {
            ll val = x.second[i].first; 
            ll ttl = x.second[i].second; 
            for (ll j=0; j<ttl; j++) {
                items.push_back({val, wt}); 
                cnt--; 
                if (cnt == 0) {
                    done = 1; break; 
                }
            }
            if (done == 1) break; 
        }
    }
    vector<vector<ll>> dp(items.size()+1, vector<ll>(S+1,0)); 
    for (ll i=1; i<=items.size(); i++) {
        for (ll j=1; j<=S; j++) {
            if (j - items[i-1].second >= 0) {
                dp[i][j] = max(dp[i][j], dp[i-1][j-items[i-1].second] + items[i-1].first); 
            }
            dp[i][j] = max(dp[i][j], dp[i-1][j]); 
        }
    }
    cout << dp[items.size()][S] << endl; 
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    solve(); 
}

Compilation message (stderr)

knapsack.cpp: In function 'void solve()':
knapsack.cpp:21:23: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         for (ll i=0; i<x.second.size(); i++) {
      |                      ~^~~~~~~~~~~~~~~~
knapsack.cpp:35:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for (ll i=1; i<=items.size(); i++) {
      |                  ~^~~~~~~~~~~~~~
#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...