n方的做法,13-15WA了,dfs里pos是记录上一个与u-1位置不同色的位置。
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int t, n;
int a[N];
int dp[N][N];
int dfs1(int u, int pos) {
if (u > n)
return 0;
if (dp[u][pos])
return dp[u][pos];
int ret = 0;
ret = (a[u] == a[u - 1] ? a[u] : 0) + dfs1(u + 1, pos);
ret = max(ret, (a[u] == a[pos] ? a[u] : 0) + dfs1(u + 1, u - 1));
return dp[u][pos] = ret;
}
int main() {
cin >> t;
while (t--) {
memset(a, 0, sizeof a);
memset(dp, 0, sizeof dp);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
cout << dfs1(1, 0) << '\n';
}
return 0;
}