Submission #1133896

#TimeUsernameProblemLanguageResultExecution timeMemory
1133896Chal1shkanKnapsack (NOI18_knapsack)C++20
100 / 100
319 ms2968 KiB
# include <bits/stdc++.h> using namespace std; # define ll long long # define ld long double # define pii pair <int, int> # define pll pair <ll, ll> # define nl '\n' # define sz(x) (int)(x).size() # define all(x) (x).begin(), (x).end() # define deb(x) cerr << #x << " = " << x << endl; # define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) const int maxn = (int)1e5 + 3; const ll inf = (ll)1e9 + 0; const int mod = (int)1e9 + 7; const bool T = 0; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int s, n; array<int, 3> a[maxn]; vector <pii> v[2002]; int dp[2][2002]; void ma1n () { cin >> s >> n; for (int i = 1; i <= n; ++i) { cin >> a[i][0] >> a[i][1] >> a[i][2]; a[i][2] = min(a[i][2], s / a[i][1]); v[a[i][1]].push_back({a[i][0], a[i][2]}); } bool cur = 1, prev = 0; for (int i = 1; i <= s; ++i) { sort(all(v[i]), greater<pii>()); for (int x = 0; x <= s; ++x) { int c = 0, sum = 0; for (int j = 0; j < sz(v[i]); ++j) { int pnt = 0; while ((c + 1) * i <= x && pnt < v[i][j].second) { c++; pnt++; sum += v[i][j].first; dp[cur][x] = max(dp[cur][x], dp[prev][x - c * i] + sum); } } } for (int j = 0; j <= s; ++j) { dp[cur][j] = max(dp[cur][j], dp[prev][j]); dp[prev][j] = 0; } swap(prev, cur); } cout << dp[prev][s] << nl; } signed main () { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int ttt = 1; if (T) cin >> ttt; while (ttt--) { ma1n(); } 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...