Cod sursa(job #638071)

Utilizator darrenRares Buhai darren Data 20 noiembrie 2011 18:39:14
Problema PalM Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.82 kb
#include <cstring>
#include <fstream>

using namespace std;

char A[506];
int N, maxP[502][502][26];

int main()
{
	ifstream fin("palm.in");
	ofstream fout("palm.out");
	
	fin >> A;
	N = strlen(A);
	
	for (int i = 1; i <= N; ++i)
		for (int j = 0; j <= A[i - 1] - 'a'; ++j)
			maxP[i][i][j] = 1;
	for (int i = 2; i <= N; ++i) // marimea
		for (int j = 1; j <= N - i + 1; ++j)
		{
			for (int k = 0; k <= 26; ++k)
				maxP[j][j + i - 1][k] = max(maxP[j][j + i - 2][k], maxP[j + 1][j + i - 1][k]);
			if (A[j - 1] == A[j + i - 2])
				for (int k = 0; k <= A[j - 1] - 'a'; ++k)
				{
					if (i > 2)
						maxP[j][j + i - 1][k] = max(maxP[j][j + i - 1][k], maxP[j + 1][j + i - 2][A[j - 1] - 'a'] + 2);
					else
						maxP[j][j + i - 1][k] = max(maxP[j][j + i - 1][k], 2);
				}
		}
	
	fout << maxP[1][N][0];
	
	fin.close();
	fout.close();
}