Cod sursa(job #635996)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 19 noiembrie 2011 16:12:02
Problema PalM Scor 30
Compilator cpp Status done
Runda .com 2011 Marime 0.87 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();
void solve();

int main()
{
	read();
	initialise();
	solve();
	g<<mat[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];
	}
}

void solve()
{
	int k,i,j,maxa,c;
	for (k=1;k<lg;++k)
		for (i=0,j=k;j<lg;++i,++j)
			if (a[i]==a[j]&&a[i]<=mat2[i+1][j-1])
			{
				mat2[i][j]=a[i];
				mat[i][j]=mat[i+1][j-1]+2;
			}
			else
			{
				c=mat2[i+1][j];
				maxa=mat[i+1][j];
				if (maxa<mat[i][j-1])
				{
					maxa=mat[i][j-1];
					c=mat2[i][j-1];
				}
				mat[i][j]=maxa;
				mat2[i][j]=c;
			}
}