Cod sursa(job #635976)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 19 noiembrie 2011 16:04:01
Problema PalM Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 1.22 kb
#include<fstream>
#include<cstring>
#define NX 550
using namespace std;

char a[NX],mat2[NX][NX];
int mat[NX][NX],lg,s;

ifstream f("palm.in");
ofstream g("palm.out");

void read();
void initialise();
int solve(int i,int j);

int main()
{
	read();
	initialise();
	g<<solve(0,lg-1);
	
	f.close();
	g.close();
	return 0;
}

void read()
{
	f.getline(a,NX);
	lg=strlen(a);
}

void initialise()
{
	int i;
	for (i=0;i<lg;++i)
	{
		mat[i][i]=1;
		mat2[i][i]=a[i];
	}
}

int solve(int i,int j)
{
	/*if (i==3&&j==5) 
		++s;
	if (i==2&&j==6)
		++s;*/
	if (i<0||j<0)
		 return 0;
	if (mat[i][j]) return mat[i][j];
	else 
		if (a[i]==a[j])
			{
				int z;
				z=solve(i+1,j-1);
				if (a[i]<=mat2[i+1][j-1]) 
					{ mat[i][j]=z+2; mat2[i][j]=a[i]; }
				else 
				{
					int maxx,y;
					char c;
					maxx=solve(i+1,j); c=mat2[i+1][j];
					y=solve(i,j-1);
					if (maxx<y) 
						{ maxx=y; c=mat2[i][j-1];}
					mat[i][j]=maxx; mat2[i][j]=c;
				}
		}
		else
			{
				int maxx,y;
					char c;
					maxx=solve(i+1,j); c=mat2[i+1][j];
					y=solve(i,j-1);
					if (maxx<y) 
						{ maxx=y; c=mat2[i][j-1];}
					mat[i][j]=maxx; mat2[i][j]=c;
			}
	return mat[i][j];
	//return 0;
}