点击打开链接http://acm.nyist.net/JudgeOnline/problem.php?pid=37
#include <iostream>
#include <cstdio>
#include <cstring>
#define M 1010
using namespace std;
int dp[M][M];
char s[M],rs[M];
int main()
{
int t,n,i,j,k,ans;
cin>>t;
while(t--)
{
int l;
l=0;
scanf("%s",s);
k=strlen(s);
for(i=k-1;i>=0;i--) //s是回文串 则 s=rs
{
rs[l++]=s[i];
}
memset(dp,0,sizeof(dp));
for(i=1;i<=k;i++)
{
for(j=1;j<=k;j++)
{
if(s[i-1]==rs[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{ //zk!=ai zk!=bj 两种可能
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
//dp[l][l] //不需要添加的字符
ans=(l-dp[l][l]);
cout<<ans<<endl;
}
return 0;
}