Submission #1317821

#TimeUsernameProblemLanguageResultExecution timeMemory
1317821AratabKnapsack (NOI18_knapsack)C++20
0 / 100
1095 ms332 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = (ll)(1e18) + 13; int main() { ios::sync_with_stdio(0); cin.tie(0); int s, n; cin >> s >> n; int a[n][3]; for (int i=0; i<n; i++) { for (int j=0; j<3; j++) { cin >> a[i][j]; } } vector<ll> dp(s+5, -INF); dp[0] = 0; for (int i=s; i>=0; i--) { int x = 0; ll v = 0; queue<int> q; for (int j=0; j<n; j++) { int k = a[j][2]; while (k--) { // deduct if exceeded while (x + a[j][1] > i) { if (q.empty()) { break; } int l = q.front(); q.pop(); x -= a[l][1]; v -= a[l][0]; } if (x + a[j][1] > i) { break; } x += a[j][1]; v += a[j][0]; q.push(j); if (dp[i-x] > -INF) { // cerr << i << ' ' << x << ' ' << v << '\n'; dp[i] = max(dp[i], dp[i-x] + v); } } } } ll ans = 0; for (int i=0; i<=s; i++) { ans = max(ans, dp[i]); } cout << ans << '\n'; }
#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...