Submission #1171265

#TimeUsernameProblemLanguageResultExecution timeMemory
1171265ishaanthenerdKnapsack (NOI18_knapsack)C++20
73 / 100
1095 ms2832 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll MOD = 1e9 + 7;

ll bpow(ll a, ll b) {
    ll ans = 1, temp = a % MOD;
    while (b) {
        if (b & 1) ans = ans * temp % MOD;
        temp = temp * temp % MOD;
        b >>= 1;
    }
    return ans;
}

ll divide(ll a, ll b) {
    return (a % MOD) * bpow(b, MOD - 2) % MOD;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    ll s, n;
    cin >> s >> n;
    vector<ll> v(n), w(n), k(n);
    for (ll i = 0; i < n; i++) cin >> v.at(i) >> w.at(i) >> k.at(i);

    vector<ll> dp(s + 1, INT_MIN);
    dp.at(0) = 0;
    for (ll i = 0; i < n; i++) {
        // cout << "w.at(i) = " << w.at(i) << endl;
        // cout << "k.at(i) = " << k.at(i) << endl;
        for (ll j = s; j >= 0; j--) {
            for (ll kk = 1; (kk <= k.at(i)) && (j - w.at(i) * kk >= 0); kk++) {
                if (dp.at(j - w.at(i) * kk) != INT_MIN) dp.at(j) = max(dp.at(j), dp.at(j - w.at(i) * kk) + v.at(i) * kk);
            }
        }
        /*
        for (ll j = 0; j <= s; j++) {
            if (dp.at(j) > 0) cout << "{" << j << ", " << dp.at(j) << "} ";
        }
        cout << endl;
        */
    }
    ll ans = 0;
    for (ll i : dp) ans = max(ans, i);
    cout << ans << endl;

    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...