https://codeforces.com/contest/1114/problem/D
o(n^2)求最长回文子序列
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int a[5000+10],b[5000+10];
int dp[5000+10][5000+10];
int main(){
int n,cnt=0;
cin>>n;
a[0]=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x!=a[cnt]){
a[++cnt]=x;
}
}
for(int i=1;i<=cnt;i++){
b[i]=a[cnt-i+1];
}//反向
//!!!
for(int i=1;i<=cnt;i++){
for(int j=1;j<=cnt;j++){
if(a[i]==b[j])dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
//!!!
cout<<cnt-(dp[cnt][cnt]+1)/2<<endl;
return 0;
}