#include #include #include int max (int a, int b) { if (a > b) return a; else return b; } int main(){ int i, *diff_2, *diff_1, * duck, n, diff, start; while (1) { if (scanf("%i", &n) != 1) break; duck = malloc(sizeof(int)* n); diff_1 = malloc(sizeof(int)* n); diff_2 = malloc(sizeof(int)* n); for (i = 0; i < n; i++) scanf("%i", &duck[i]); for(i = 0; i < n; i++){ diff_2[i] = 0; } for (i = 0; i < n - 1; i++){ if (duck[i] == duck[i + 1]){ diff_1[i] = 1; } else { diff_1[i] = 0; } } diff_1[n - 1] = 0; for (diff = 2; diff < n; diff++){ for (start = 0; (start + diff) < n; start++){ if (duck[start] == duck[start + diff]){ diff_2[start] = diff_1[start]; diff_1[start] = diff_2[start + 1] + 1; } else { diff_2[start] = diff_1[start]; diff_1[start] = max(diff_1[start], diff_1[start + 1]); } } } printf("%i\n", diff_1[0]); free(duck); free(diff_1); free(diff_2); } return 0; }