Submission #5790

#TimeUsernameProblemLanguageResultExecution timeMemory
5790gs12037수열 (APIO14_sequence)C++98
0 / 100
0 ms81564 KiB
#include <stdio.h> #include <algorithm> #define M 100009 using namespace std; int n, k,path[200][M]; long long int d[2][M],ans,s[M]; long long int f(int j, int r){ return d[0][r] + (s[n] - s[j])*(s[j] - s[r]); } int main(){ int i, j; scanf("%d %d", &n, &k); for (i = 1; i <= n; i++) scanf("%lld", &s[i]); for (i = 1; i <= n; i++) s[i] = s[i - 1] + s[i]; int pivot; for (i = 1; i <= k; i++){ pivot = 0; for (j = i; j <= n; j++){ while (s[j] >= (s[n] + s[pivot])/2 && f(j, pivot) <= f(j, pivot + 1) && pivot < j-1) pivot++; d[1][j] = f(j, pivot); path[i][j] = pivot; } for (j = 1; j <= n; j++) d[0][j] = d[1][j]; } for (j = 1; j <= n; j++) ans = max(ans, d[1][j]); printf("%lld\n", ans); for (j = 1; j <= n; j++){ if (ans == d[1][j]){ int temp = j; for (i = k; i >= 1; i--){ s[i] = temp; temp = path[i][temp]; } break; } } for (i = 1; i <= k; i++) printf("%lld ", s[i]); 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...