Submission #966102

#TimeUsernameProblemLanguageResultExecution timeMemory
966102MisterReaperSplit the sequence (APIO14_sequence)C++17
0 / 100
2065 ms6492 KiB
#include <bits/stdc++.h> #ifdef DEBUG #include "debug.h" #else #define debug(...) void(23) #endif using i64 = long long; constexpr int maxN = 1E5 + 5; constexpr int maxK = 200 + 5; int A[maxN], go[maxK][maxN]; i64 dp[maxK][maxN], p[maxN]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N, K; std::cin >> N >> K; for(int i = 1; i <= N; i++) { std::cin >> A[i]; } for(int i = 1; i <= N; i++) { p[i] = p[i - 1] + A[i]; } for(int k = 1; k <= K; k++) { for(int i = 1; i <= N; i++) { for(int j = 0; j < i; j++) { if(dp[k - 1][j] + 1LL * (p[i] - p[j]) * (p[N] - p[i]) > dp[k][i]) { go[k][i] = j; dp[k][i] = dp[k - 1][j] + 1LL * (p[i] - p[j]) * (p[N] - p[i]); } } } } int ans = 1; for(int i = N - K; i < N; i++) { if(dp[K][i] >= dp[K][ans]) { ans = i; } } std::cout << dp[K][ans] << '\n'; std::vector<int> v; for(int k = K; k >= 1; k--) { v.emplace_back(ans); ans = go[k][ans]; } for(int i = K - 1; i >= 0; i--) { std::cout << v[i] << " \n"[i == 0]; } 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...