Submission #491211

#TimeUsernameProblemLanguageResultExecution timeMemory
491211blueFeast (NOI19_feast)C++17
100 / 100
380 ms15376 KiB
#include <iostream> #include <vector> using namespace std; using ll = long long; using vll = vector<ll>; using vvll = vector<vll>; using vi = vector<int>; using vvi = vector<vi>; using pll = pair<ll, ll>; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, K; cin >> N >> K; vll A(1+N); for(int i = 1; i <= N; i++) cin >> A[i]; ll lo = 0, hi = 1'000'000'000'000'000'000LL; while(1) { ll cost = (lo+hi)/2; vector<pll> dp0(1+N); vector<pll> dp1(1+N); dp0[0] = {0LL, 0LL}; dp1[0] = {-cost, -1LL}; for(int i = 1; i <= N; i++) { dp0[i] = max(dp0[i-1], dp1[i-1]); dp1[i] = max(pll{dp1[i-1].first + A[i], dp1[i-1].second}, pll{dp0[i-1].first + A[i] - cost, dp0[i-1].second - 1}); } pair<ll, int> X = max(dp0[N], dp1[N]); bool works = (-X.second <= K); if(lo == hi) { cout << X.first - cost*X.second << '\n'; return 0; } else { if(works) hi = cost; else lo = cost+1; } } }
#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...