Cod sursa(job #930551)

Utilizator crushackPopescu Silviu crushack Data 27 martie 2013 18:30:57
Problema Elimin 2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define NMax 2010
using namespace std;

const char IN[]="elimin2.in",OUT[]="elimin2.out";

int N;
short T[NMax][NMax];
char s[NMax];
bool first;

void write(int x,int y){

	if (x>y) return;
	if (x==y){
		printf("%c",s[x]);
		return;
	}

	if (s[x]==s[y]) printf("%c",s[x]);

	if (s[x]==s[y]) write(x+1,y-1);
	else if (T[x][y]==T[x+1][y]) write(x+1,y);
	else write(x,y+1);

	if (s[x]==s[y]) printf("%c",s[x]);
}

int main()
{
	int i,j,k,x,y;
	freopen(IN,"r",stdin);
	scanf("%s",s+1);
	fclose(stdin);

	N=strlen(s+1);

	for (i=1;i<=N;++i) T[i][i]=1;

	for (i=x=1;i<=N;++i) if (s[i]>s[x]) x=i;y=x;
	for (k=2;k<=N;++k)
		for (i=1;i+k-1<=N;++i){
			j=i+k-1;
			if (s[i]==s[j]) T[i][j]=T[i+1][j-1]+2;
			else T[i][j]=max(T[i+1][j],T[i][j-1]);
			if (s[i]==s[j] && ( T[i][j]>T[x][y] || T[i][j]==T[x][y] && s[i]>s[x]) && s[i]!='0')
				x=i,y=j;
		}
	freopen(OUT,"w",stdout);
	write(x,y);printf("\n");
	fclose(stdout);
	return 0;
}