Cod sursa(job #637635)

Utilizator FlorianFlorian Marcu Florian Data 20 noiembrie 2011 15:40:40
Problema PalM Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.79 kb
using namespace std;
#include<fstream>
#include<cstring>
const int MAX_N = 505;
int dp[MAX_N][MAX_N][27];
int N;
char s[MAX_N];
int main()
{
	ifstream in("palm.in"); ofstream out("palm.out");
	in >> s;
	N = strlen(s);
	int lg, i, j;
	int sol = 1;
	for(i = 1; i <= N; ++i) dp[i][i][s[i-1]-'a'] = 1;
	for(lg = 2; lg <= N; ++lg)
		for( i = 1; i + lg - 1 <= N; ++i)
		{
			j = i + lg - 1;
			for(char k = 'a'; k <= 'z'; ++k )
				dp[i][j][k-'a'] = max( dp[i+1][j][k-'a'], dp[i][j-1][k-'a'] );
			if( s[i-1] == s[j-1] )
			{
				for(char k = s[i-1]; k <= 'z'; ++k )
					dp[i][j][s[i-1]-'a'] = max( dp[i][j][s[i-1] - 'a'], 2 + dp[i+1][j-1][k-'a'] );
			}
		}
	for(char k = 'a'; k <= 'z'; ++k)
		if( dp[1][N][k-'a'] > sol ) sol = dp[1][N][k-'a'];
	out << sol << "\n";
	return 0;
}