제출 #5778

#제출 시각아이디문제언어결과실행 시간메모리
5778gs12037수열 (APIO14_sequence)C++98
0 / 100
0 ms131072 KiB
#include <stdio.h> #include <algorithm> #define M 100009 using namespace std; int n, k,path[200][M]; long long int d[209][M],ans,s[M]; long long int f(int i, int j, int r){ return d[i][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("%d", &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 = 1; j <= n; j++){ while (s[j] >= (s[n] + s[pivot]) / 2 && f(i - 1, j, pivot) <= f(i - 1, j, pivot + 1) && pivot < j) pivot++; d[i][j] = f(i - 1, j, pivot); path[i][j] = pivot; } } for (i = 1; i <= n; i++) ans = max(ans, d[k][i]); for (i = 1; i <= n; i++){ if (ans == d[k][i]){ int temp = i; for (j = k; j >= 1; j--){ s[j] = temp; temp = path[j][temp]; } break; } } for (j = 1; j <= k; j++) printf("%d ", s[j]); printf("\n%d", 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...