样例:
input:
3
abc
abbab
ababbbac
output:
case #0:
1
case #1:
4
case #2:
5
思路:
emmm在dp方面真的是个蒟蒻,啥也不会…
状态转移方程:
cnt[i][j]=cnt[i+1][j-1]
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=222;
int n;
char a[maxn],cnt[maxn][maxn];
void palindrome(char a[])
{
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]==a[i+1])
{
cnt[i][i+1]=1;
cnt[i+1][i]=1;
}
cnt[i][i]=1;
}
int cntt=1;
for(int i=l-2;i>=0;i--)
{
for(int j=i+1;j<l;j++)
{
if(a[i]!=a[j]) cnt[i][j]=0;
else
{
cnt[i][j]=cnt[i+1][j-1];
if(cnt[i][j])
{
cntt=max(cntt,j-i+1);
//cout<<"i="<<i<<" "<<"j="<<j<<" "<<"cnt="<<cntt<<endl;
}
}
}
}
cout<<cntt<<endl;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
cout<<"case #"<<i-1<<":"<<endl;
//cout<<a<<endl;
palindrome(a);
}
return 0;
}