Pagini recente » Cod sursa (job #2049538) | Cod sursa (job #1175048) | Cod sursa (job #2073983) | Cod sursa (job #2127281) | Cod sursa (job #2452953)
#include <bits/stdc++.h>
using namespace std;
void _ (int &x, int y) {if (x < y) x = y;}
const int N = 600;
int dp[1 + N * 4][1 + N * 4], a[1 + N * 4];
int main() {
freopen ("harrypotter.in", "r", stdin);
freopen ("harrypotter.out", "w", stdout);
int n;
cin >> n;
vector <vector <int> > pos (n + 1);
n *= 4;
for (int i = 1; i <= n; i++) cin >> a[i], pos[a[i]].push_back (i);
int ans = 0;
for (int l = 1; l <= n; l++) for (int i = 1; i <= n; i++) {
int j = i + l;
if (j > n) continue;
_ (dp[i][j], dp[i + 1][j]); _ (dp[i][j], dp[i][j - 1]);
_ (dp[i][j], dp[i + 1][j - 1] + (a[i] == a[j]));
for (int p : pos[a[i]]) if (i < p && p < j) _ (dp[i][j], dp[i + 1][p - 1] + dp[p + 1][j] + 1);
for (int p : pos[a[j]]) if (i < p && p < j) _ (dp[i][j], dp[i][p - 1] + dp[p + 1][j - 1] + 1);
_ (ans, dp[i][j]);
}
cout << ans << "\n";
return 0;
}