パスワードドロップ:(間隔dpソリューション)
質問リンク
#include<iostream>
#include<string>
const int N=1000+10;
using namespace std;
string s;
int f[N][N];
int n;
int main(){
cin>>s;
n=s.size();
for(int len=1;len<=n;len++){
for(int i=0;i-1+len<=n;i++){
int j=i-1+len;
if(len==1){
f[i][j]=1;
}else{
f[i][j]=max(f[i][j-1],f[i+1][j]);
if(s[i]==s[j]){
f[i][j]=max(f[i][j],f[i+1][j-1]+2);
}
}
}
}
cout<<n-f[0][n-1]<<endl;
return 0;
}