Submission #1096646

#TimeUsernameProblemLanguageResultExecution timeMemory
1096646dchang0524Knapsack (NOI18_knapsack)C++17
100 / 100
61 ms3412 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;


int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int S, N;
    cin >> S >> N;
    vector<ll> dp(S+1);
    unordered_map<int ,multiset<ll>> items; //<weight, multiset of values>
    
    //processing(sorting) input
    for (int i = 0; i<N; i++) {
        int V, W, K;
        cin >> V >> W >> K;

        int maxQ = S/W;
        while (items[W].size() < maxQ && K>0) {
            items[W].insert(V);
            K--;
        }
        while (items[W].size() == maxQ && K>0 && V > *items[W].begin()) {
            items[W].erase(items[W].begin());
            items[W].insert(V);
            K--;
        }
    }


    // Converting multiset to a vector
    vector<vector<int>> choices(S + 1);
    for (int i = 1; i <= S; i++) {
        if (items.find(i) != items.end()) {
            choices[i].assign(items[i].rbegin(), items[i].rend());
        }
    }

    //knapsack DP
    for (int i = 1; i<S+1; i++) {
        vector<int> values = choices[i];
        for (int k = 0; k<values.size(); k++) {
            for (int x = S; x>=0; x--) {
                if (x-i >= 0) {
                    dp[x] = max(dp[x], dp[x-i] + values[k]);
                }
            }
        }
    }

    ll ans = 0;
    for (int x = 0; x<S+1; x++) {
        ans = max(ans, dp[x]);
    }
    cout << ans << "\n";
}

Compilation message (stderr)

knapsack.cpp: In function 'int main()':
knapsack.cpp:21:32: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   21 |         while (items[W].size() < maxQ && K>0) {
      |                ~~~~~~~~~~~~~~~~^~~~~~
knapsack.cpp:25:32: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   25 |         while (items[W].size() == maxQ && K>0 && V > *items[W].begin()) {
      |                ~~~~~~~~~~~~~~~~^~~~~~~
knapsack.cpp:44:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         for (int k = 0; k<values.size(); k++) {
      |                         ~^~~~~~~~~~~~~~
#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...