O(n2) 做法,为什么 #5 ~ #10 对,#1 ~ #4 错?
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 2010;
ll a[N];
ll f[N][N];
signed main(){
int t;
cin >> t;
while(t --){
memset(f, 0, sizeof f);
int n;
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> a[i];
}
ll maxx = 0;
for(int i = 1; i < n; i ++){
for(int j = 1; j < i; j ++){
ll mid = 0;
if(a[i] == a[i + 1])mid = a[i];
f[i + 1][j] = max(f[i + 1][j], f[i][j] + mid);
mid = 0;
if(a[j] == a[i + 1])mid = a[j];
f[i + 1][i] = max(f[i + 1][i], f[i][j] + mid);
}
}
for(int i = 1; i <= n; i ++){
for(int j = 1; j < i; j ++){
maxx = max(maxx, f[i][j]);
}
}
cout << maxx << endl;
}
return 0;
}