제출 #1211316

#제출 시각아이디문제언어결과실행 시간메모리
1211316maltaFeast (NOI19_feast)C++20
0 / 100
1097 ms6208 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<ll> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } auto check = [&](ll lambda) { vector<ll> dp(n + 1, -1e18); dp[0] = 0; vector<int> last(n + 1, -1); int used = 0; for (int i = 1; i <= n; ++i) { ll sum = 0; for (int j = i; j >= 1; --j) { sum += a[j - 1]; ll val = (j > 1 ? dp[j - 1] : 0) + sum - lambda; if (val >= dp[i]) { dp[i] = val; last[i] = j - 1; } } if (dp[i] >= 0) { used++; } } return used >= k; }; ll lo = -1e14, hi = 1e14; while (lo < hi) { ll mid = lo + (hi - lo + 1) / 2; if (check(mid)) { lo = mid; } else { hi = mid - 1; } } vector<ll> dp(n + 1, -1e18); dp[0] = 0; for (int i = 1; i <= n; ++i) { ll sum = 0; for (int j = i; j >= 1; --j) { sum += a[j - 1]; ll val = (j > 1 ? dp[j - 1] : 0) + sum; dp[i] = max(dp[i], val); } } cout << dp[n] + lo * k << '\n'; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...