Submission #1186244

#TimeUsernameProblemLanguageResultExecution timeMemory
1186244tamyteUplifting Excursion (BOI22_vault)C++20
0 / 100
10 ms584 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ll m; ll L; cin >> m >> L; vector<ll> a(2 * m + 2); for (int i = -m; i <= m; ++i) { cin >> a[i + m]; } vector<ll> ps(2 * m + 2), sum(2 * m + 2); vector<ll> b(2 * m + 2); for (int i = m; i <= 2 * m; ++i) { b[i] = min(a[i], m); a[i] -= b[i]; } for (int i = m; i <= 2 * m; ++i) { ps[i] += a[i] * (i - m); sum[i] += a[i]; ps[i + 1] += ps[i]; sum[i + 1] += sum[i]; } vector<ll> dp(m * m * m + 1, LLONG_MIN); dp[0] = 0; for (int i = m; i <= 2 * m; ++i) { for (int _ = 0; _ < b[i]; ++_) { int v = i - m; for (int k = m * m * m; k >= v; --k) { dp[k] = max(dp[k], dp[k - v] + 1); } } } ll res = LLONG_MIN; for (int i = m; i <= 2 * m; ++i) { ll need = L - ps[i]; // cout << need << " "; if (need < 0 || need > m * m * m) continue; if (dp[need] == LLONG_MIN) continue; res = max(res, dp[need] + sum[i]); } if (res == LLONG_MIN) { cout << "impossible\n"; } else { cout << res << 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...
#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...