Cod sursa(job #37943)

Utilizator yoyolichIoana Ardeleanu yoyolich Data 25 martie 2007 13:07:52
Problema Elimin 2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define maxn 2048
FILE *f=fopen("elimin2.in","r"), *g=fopen("elimin2.out","w");
short dp[maxn][maxn];
char a[maxn],b[maxn];
int d[maxn];
int n,m,i,h,k;
void afis(int i, int j)
{

	if(i==0 || j==0) return;
	if(a[i]==b[j]) afis(i-1, j-1);
	else
	{
		if(dp[i-1][j]>dp[i][j-1]) afis(i-1, j);
			else afis(i, j-1);
	}
	if(a[i]==b[j]) fprintf(g,"%c", a[i]);
}



int main()
{
	char ax[maxn];
	fgets(ax, maxn, f);
	n=strlen(ax);

	for(i=0;i<n;i++) a[i+1]=ax[i], b[i+1]=ax[i];
	reverse(b+1, b+n+1);
	
//	for(i=n;i>=1;i++) b[++m]=a[i];
	for(k=1;k<=n;k++)
		for(h=1;h<=n;h++)
			if(a[k]==b[h]) dp[k][h]=1+dp[k-1][h-1];
		else if(dp[k-1][h]>dp[k][h-1]) dp[k][h]=dp[k-1][h];
			else dp[k][h]=dp[k][h-1];
	
	/*
	for(i=0,k=n,h=m;dp[k][h];)
		if(a[k]==b[h]){d[i++]=a[k];k--;h--;}
		else if(dp[k][h]==dp[k-1][h])k--;
		else h--;

	for(k=i-1;k>=0;k--) fprintf(g,"%d",d[k]);
		fprintf(g,"\n");
		*/
		afis(n, n);
		fprintf(g, "\n");
	fclose(f);
	fclose(g);
	return 0;
}