AC代码
#include<bits/stdc++.h>
using namespace std;
int dp[1001][1001];//dp[i][j]表示从i到j这一段是否是回文,1代表是
int main()
{
int cn=0,Max=1;
char s[1001],c;
while((c=getchar())!='\n')
{
s[cn++]=c;
}
fill(dp[0],dp[0]+1001*1001,0);
for(int i=0;i<cn;i++)
{
dp[i][i]=1;//从自己到自己肯定是回文
if(i<cn-1)
{
if(s[i]==s[i+1])
{
dp[i][i+1]=1;//连续相等的也是回文
Max=2;
}
}
}
for(int i=3;i<=cn;i++)
{
for(int j=0;j+i-1<cn;j++)
{
int temp=j+i-1;
if(s[j]==s[temp]&&dp[j+1][temp-1]==1)//d[i][j]为1的条件是dp[i+1][j-1]为1且头尾相等
{
dp[j][temp]=1;
Max=i;
}
}
}
printf("%d",Max);
return 0;
}