Submission #345557

#TimeUsernameProblemLanguageResultExecution timeMemory
345557NursikFeast (NOI19_feast)C++14
12 / 100
136 ms49260 KiB
#include <bits/stdc++.h> #define f first #define s second #define ll long long #define pb push_back #define all(v) v.begin(),v.end() #define ld long double using namespace std; void data() { #ifdef NURS freopen("main.in", "r", stdin); freopen("main.out", "w", stdout); #endif } void win() { ios_base::sync_with_stdio(0), cin.tie(0),cout.tie(0); } int block = 400; const ld eps = 1e-6; const int N = 1e6 + 500; const int mod = 1e9 + 7; const ll hh = 100010683; const ll hh2 = 150005819; int n, k, g, pos; int a[N]; ll s, ans; ll dp[5000][5000], pref[5000]; int main() { data(); win(); cin >> n >> k; bool was = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; was = was | (a[i] < 0), s += a[i]; if (a[i] < 0) g++, pos = i; pref[i] += pref[i - 1] + a[i]; } //first subtask if (was == 0) { cout << s << '\n'; return 0; } //second subtask if (g == 1 && k >= 2) { cout << s - a[pos] << '\n'; return 0; } else if (g == 1 && k == 1) { ans = max(ans, s); s = 0; for (int i = 1; i < pos; i++) s += a[i]; ans = max(ans, s), s = 0; for (int i = pos + 1; i <= n; i++) s += a[i]; ans = max(ans, s); cout << ans << '\n'; return 0; } //3, 4, 5 subtasks for (int i = 0; i <= n; i++) { for (int j = 0; j <= k; j++) { dp[i][j] = -1e9; } } dp[0][0] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= k; j++) { for (int len = 1; len <= i; len++) { if (dp[i - len][j - 1] != -1e9) { dp[i][j] = max(dp[i - len][j - 1] + pref[i] - pref[i - len], dp[i][j]); } } dp[i][j] = max(dp[i][j], dp[i - 1][j]); if (i == n && j == k) ans = max(ans, dp[i][j]); } dp[i][0] = max(dp[i][0], dp[i - 1][0]); } cout << ans; }
#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...