Cod sursa(job #638121)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 20 noiembrie 2011 19:00:10
Problema PalM Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.75 kb
#include<cstdio>
#include<cstring>
#define maxim(a,b) a>b?a:b
void read(),solve();
char A[510],B[510],L[510][510];
int len,i,st,dr,SOL[510][510],j,sol;
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("palm.in","r",stdin);
	freopen("palm.out","w",stdout);
	scanf("%s",A+1);
}
void solve()
{
	len=strlen(A+1);
	for(i=len;i>=1;i--)B[i]=A[len-i+1];
	for(i=1;i<=len;i++)
		for(j=1;j<=len;j++)
		{
			if(A[i]==B[j]&&A[i]>=L[i-1][j-1]){SOL[i][j]=SOL[i-1][j-1]+1;L[i][j]=A[i];continue;}
			if(SOL[i-1][j]>SOL[i][j-1])
			{
				SOL[i][j]=SOL[i-1][j];L[i][j]=L[i-1][j];
			}
			else
			{
				SOL[i][j]=SOL[i][j-1];L[i][j]=L[i][j-1];
			}
		}
	for(i=1;i<=len;i++)sol=maxim(sol,SOL[i][len-i+1]);
	printf("%d\n",sol*2+1);
}