查看题目
题意:将两个字符串按照原先顺序合并,求最长回文串。
code:
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=110;
char a[maxn],b[maxn];
bool f[maxn][maxn][maxn][maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)
{
cin>>a+1>>b+1;
int lena=strlen(a+1),lenb=strlen(b+1);
int i,j,k,e,ans=0;
for(i=0; i<=lena; i++)
for(j=0; j<=lenb; j++)
for(k=1; k+i-1<=lena; k++)
for(e=1; e+j-1<=lenb; e++)
{
int d=k+i-1,t=e+j-1;
if(i+j<=1)
f[k][d][e][t]=1;
else
{
f[k][d][e][t]=0;
if(a[k]==a[d])
f[k][d][e][t]|=f[k+1][d-1][e][t];
if(a[k]==b[t])
f[k][d][e][t]|=f[k+1][d][e][t-1];
if(a[d]==b[e])
f[k][d][e][t]|=f[k][d-1][e+1][t];
if(b[e]==b[t])
f[k][d][e][t]|=f[k][d][e+1][t-1];
}
if(f[k][d][e][t])
ans=max(ans,i+j);
}
cout<<ans<<endl;
}
return 0;
}