Cod sursa(job #1228011)

Utilizator mihaimusatMihai Musat mihaimusat Data 12 septembrie 2014 15:22:15
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<cstring>
#include<cmath>

using namespace std;

char s[510];

int n,best[510][510][27],sol;

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

void solve()
{
	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 print()
{
	ofstream fout("palm.out");
	fout<<sol<<"\n";
}

int main()
{
	read();
	solve();
	print();
	return 0;
}