Cod sursa(job #640799)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 26 noiembrie 2011 15:23:49
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#include<cstring>
#include<cmath>
using namespace std;
char s[510];
int n,best[510][510][27],sol;

void Citire()
{
	ifstream fin("palm.in");
	fin>>(s+1);
	fin.close();
	n=strlen(s+1);
}

void Rezolvare()
{
	int i,j,d,k;
	for(i=1;i<=n;i++)
		best[i][i][s[i]-'a']=1;
	for(d=2;d<=n;d++)
	{
		for(i=1,j=d;i<=n && j<=n;i++,j++)
		{
			if(s[i]==s[j])
			{
				best[i][j][s[i]-'a']=2;
				if(j-i+1>=3)
				{
					for(k=s[i]-'a';k<26;k++)
						best[i][j][s[i]-'a']=max(best[i][j][s[i]-'a'],2+best[i+1][j-1][k]);
				}
			}
			for(k=0;k<26;k++)
			{
				best[i][j][k]=max(best[i][j][k],max(best[i+1][j][k],best[i][j-1][k]));
			}
		}
	}
	for(k=0;k<26;k++)
		sol=max(sol,best[1][n][k]);
}

void Afisare()
{
	ofstream fout("palm.out");
	fout<<sol<<"\n";
	fout.close();
}

int main()
{
	Citire();
	Rezolvare();
	Afisare();
	return 0;
}