Submission #1308300

#TimeUsernameProblemLanguageResultExecution timeMemory
1308300tolgaKnapsack (NOI18_knapsack)C++20
73 / 100
1095 ms2496 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define endl '\n' int main() { ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); ll s, n; cin >> s >> n; vector<vector<pair<ll, ll>>> arr(s + 1); for (ll i = 0; i < n; i++) { ll v, w, k; cin >> v >> w >> k; if (w > s) continue; arr[w].push_back({v, k}); } vector<ll> dp(s + 1); auto calc_dp = [&](ll val, ll W, ll cnt) { ll price = 1LL * val * cnt, weight = 1LL * W * cnt; for (ll w = s; w >= weight; w--) dp[w] = max(dp[w], dp[w - weight] + price); }; for (ll W = 1; W <= s; W++) { for (auto &[val, cnt] : arr[W]) { ll k = min(cnt, s / W); ll pow = 1; while (k > 0) { ll take = min(pow, k); calc_dp(val, W, take); k -= take; pow <<= 1; } } } cout << *max_element(dp.begin(), dp.end()) << endl; }
#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...