#include #include #include using namespace std; int a[5001], N, dp[5001][5001]; int solve(int i, int j); int main() { while (cin >> N) { for (int i = 0; i < N; i++) { cin >> a[i]; } memset(dp, -1, sizeof(dp)); cout << solve(0, N - 1) << endl; } } int solve(int i, int j) { if (dp[i][j] != -1) return dp[i][j]; if (i >= j) return 0; int pom = 0; if (a[i] == a[j]) { pom = 1 + solve(i + 1, j - 1); } return dp[i][j] = max(max(solve(i, j - 1), solve(i + 1, j)), pom); }