Submission #988360

#TimeUsernameProblemLanguageResultExecution timeMemory
988360vjudge1Feast (NOI19_feast)C++17
12 / 100
224 ms23912 KiB
#include <iostream> #include <vector> #include <climits> using namespace std; int n, k; vector<long long> a; vector<vector<pair<long long, long long> > > DP; pair<long long, long long> dp(long long lambda) { DP[0][0] = { 0, 0 }; for (int i = 1; i <= n; i++) { DP[i][0] = max(DP[i - 1][0], DP[i - 1][1]); DP[i][1] = max( make_pair(DP[i - 1][0].first + a[i] - lambda, DP[i - 1][0].second + 1), make_pair(DP[i - 1][1].first + a[i], DP[i - 1][1].second) ); } return max(DP[n][0], DP[n][1]); } int main() { cin >> n >> k; DP.resize(n + 1, vector<pair<long long, long long>>(2, { LLONG_MIN, 0 })); a.resize(n + 1); for (int i = 1; i <= n; i++) { cin >> a[i]; } long long l = 0, r = 3e14, lambda; while ( r - l > 1) { lambda = (l + r) / 2; auto m = dp(lambda); if (m.second > k) l = lambda; else r = lambda; } auto megoldas = dp(r); cout << megoldas.first + megoldas.second * r; 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...