Cod sursa(job #636075)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 19 noiembrie 2011 16:51:16
Problema PalM Scor 40
Compilator cpp Status done
Runda .com 2011 Marime 1.02 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])
			{
				int i1,j1;
				i1=i;
				j1=j;
				mat2[i][j]=a[i];
				while (i1<=j1)
				{
					if (mat[i][j]<mat[i1][j1]+2&&(a[i]<=mat2[i1][j1]||!mat2[i1][j1]))
						mat[i][j]=mat[i1][j1]+2;
					i1++;
					j1--;
				}
			}
			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;
			}
}