Submission #1007529

#TimeUsernameProblemLanguageResultExecution timeMemory
1007529reverberationKnapsack (NOI18_knapsack)C++17
100 / 100
61 ms36852 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define pll pair<ll, ll>
#define all(x) x.begin(), x.end()
#define fs first
#define sc second
#define pb push_back
const ll Mod = 1e9 + 7;
const ll k = 300;
const db PI = 3.1415;
signed main() {
    //freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ll w, n, overallans = -1; cin >> w >> n;
    vector<vector<ll>> cnt(w + 1, vector<ll>(w + 1));
    vector<ll> dp(w + 1);
    vector<vector<pll>> elements(w + 1);
    vector<vector<ll>> pref(w + 1);
    for (ll i = 0; i < n; i++) {
        ll weight, cost, amount;
        cin >> cost >> weight >> amount;
        elements[weight].pb({cost, amount});
    }
    for (ll i = 1; i <= w; i++) {
        sort(all(elements[i]), greater<pll>());
        pref[i].resize(elements[i].size());
        for (ll j = 0; j < elements[i].size(); j++) {
            if (j == 0) pref[i][j] = elements[i][j].sc;
            else pref[i][j] = pref[i][j - 1] + elements[i][j].sc;
        }
    }
    for (ll i = 1; i <= w; i++) {
        ll id = 0, mx = -1, used = 0;
        for (ll j = 1; j <= i; j++) {
            if (elements[j].empty() || cnt[i - j][j] >= pref[j][elements[j].size() - 1]) continue;
            auto it = lower_bound(all(pref[j]), cnt[i - j][j] + 1) - pref[j].begin();
            if (mx < dp[i - j] + elements[j][it].fs) {
                mx = dp[i - j] + elements[j][it].fs;
                id = i - j;
                used = j;
            }
        }
        dp[i] = mx;
        cnt[i] = cnt[id];
        cnt[i][used]++;
        overallans = max(overallans, dp[i]);
    }
    cout << overallans << "\n";
}

Compilation message (stderr)

knapsack.cpp: In function 'int main()':
knapsack.cpp:29:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |         for (ll j = 0; j < elements[i].size(); j++) {
      |                        ~~^~~~~~~~~~~~~~~~~~~~
#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...