n<=5000 爆内存 short也行
自己和自己的回文串 LCS 不匹配的都要加变成对称
#include<iostream>
#include<string>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;
#define IO ios::sync_with_stdio(false);cin.tie(0);
ll T;
ll n,m,minn,maxx,cnt,sum,ans;
short dp[5005][5005];
string s,t;
int main() {
cin>>n;
cin>>s;
for(int i=n-1;i>=0;i--)
t+=s[i];
// cout<<t<<endl;
ll e=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
e=1-e;
if(s[i-1]==t[j-1]){
dp[e][j]=dp[1-e][j-1]+1;
}
else{
dp[e][j]=max(dp[1-e][j],dp[e][j-1]);
}
}
}
// cout<<dp[n][n]<<endl;
cout<<n-dp[e][n]<<endl;
return 0;
}