Submission #599195

#TimeUsernameProblemLanguageResultExecution timeMemory
599195SlavicGUplifting Excursion (BOI22_vault)C++17
0 / 100
558 ms524288 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; vector<int> calc(vector<int> x) { int S = (int)x.size() * 100; vector<int> dp(S + 1, INT_MIN); dp[0] = 0; for(int i = 0; i < (int)x.size(); ++i) { for(int j = S; j >= 0; --j) { if(j - x[i] >= 0) if(dp[j - x[i]] != INT_MIN) dp[j] = max(dp[j], dp[j - x[i]] + 1); } } return dp; } int main() { ll l, m; cin >> m >> l; vector<int> a(2 * m + 1); for(int i = 0; i < 2 * m + 1; ++i) cin >> a[i]; int ans = INT_MIN; vector<int> neg; int val = m; for(int i = 0; i < m; ++i) { for(int j = 0; j < a[i]; ++j) neg.push_back(val); --val; } vector<int> pos; val = 1; for(int i = m + 1; i < 2 * m + 1; ++i) { for(int j = 0; j < a[i]; ++j) pos.push_back(val); ++val; } vector<int> pp = calc(pos); vector<int> ng = calc(neg); if(l < 0) { swap(pp, ng); l = -l; } for(int sum = l; sum < (int)pp.size(); ++sum) { if(sum - l >= (int)ng.size() || pp[sum] == INT_MIN || ng[sum - l] == INT_MIN) continue; ans = max(ans, pp[sum] + ng[sum - l] + a[m]); } if(ans == INT_MIN) cout << "impossible\n"; else 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...
#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...