Cod sursa(job #38639)

Utilizator azotlichidAdrian Vladu azotlichid Data 25 martie 2007 22:46:14
Problema Elimin 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;

#define NMAX 2006
int N, i, j;
short o[NMAX][NMAX];
char a[NMAX], b[NMAX];

int main(void)
{
	freopen("elimin2.in", "r", stdin);
	freopen("elimin2.out", "w", stdout);
	gets(a+1), N = strlen(a+1);
	memcpy(b, a, sizeof(a));
	reverse(b+1, b+N+1);
	memset(o, 0, sizeof(o));
	for (i = 1; i <= N; i ++)
		for (j = 1; j <= N; j ++)
			o[i][j] = max(max((int)o[i-1][j], (int)o[i][j-1]), a[i]==b[j] ? 1+(int)o[i-1][j-1] : 0);
	for (i = j = N; i && j; )
		if (o[i][j] == 1+o[i-1][j-1])
			printf("%c", a[i]), -- i, -- j;
		else
		{
			if (o[i-1][j]==o[i][j]) -- i; else -- j;
		}
	printf("\n");
	return 0;
}