https://blog.csdn.net/CSDN_FengXingwei/article/details/82429808
题目如上
二维dp
许多细节需要注意,比如maxlen长度。
#include<string.h>
using namespace std;
char a[1000];
int main()
{
cin>>a;
int n=strlen(a);
int **dp=new int* [n];
for(int i=0;i<n;i++)
{
dp[i]=new int[n];
}
int maxlen=1;
for(int i=0;i<n;i++)
{
dp[i][i]=1;
if(i==n-1)
{
break;
}
if(a[i+1]==a[i])
{
dp[i][i+1]=1;
maxlen=2;
}
else
{
dp[i][i+1]=0;
}
}
for(int i=3;i<=n;i++)
{
for(int j=0;j<=n-i;j++)
{
int t=j+i-1;
if(a[j]==a[t])
{
dp[j][t]=dp[j+1][t-1];
if(dp[j+1][t-1]==1)
{
maxlen=max(maxlen, i);
}
}
else
{
dp[j][t]=0;
}
}
}
cout<<maxlen;
}