Cod sursa(job #638484)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 20 noiembrie 2011 21:48:13
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 512
#define Sigma 28
using namespace std;

char s[Nmax];
int p[Nmax], a[Nmax][Nmax][Sigma],N,m[Sigma];
//lungimea maxima a palindromului sa inceapa pe poz i, sa se termine pe poz j si
//sa aiba literele din margine c

int main(){
	
	freopen("palm.in","r",stdin);
	freopen("palm.out","w",stdout);
	
	fgets(s,Nmax,stdin);
	N=strlen(s);
	
	for(int i=0;i<N;++i)
		p[i]=s[i]-'a';
	
	for(int i=N-1;i>=0;--i)
		for(int j=i;j<N;++j){
			int c=p[j];
			
			if(i==j)
				a[i][j][c]=1;
			else
			//daca litera curenta egala cu prima litera
			if(p[i]==c)
			for(int l=c;l<=25;++l)
				a[i][j][c]=max(a[i][j][c],a[i+1][j-1][l]+2);
			
			for(int l=25;l>=0;--l)
				m[l]=max(m[l+1],max(a[i+1][j][l],a[i][j-1][l]));
			for(int c=0;c<=25;++c)
					a[i][j][c]=max(a[i][j][c],m[c]);
			
	}
	
	int sol=0;
	for(int i=0;i<N;++i)
		for(int j=i;j<N;++j)
			for(int l=25;l>=0;--l)
				sol=max(sol,a[i][j][l]);
	
	printf("%d",sol);
return 0;
}