Pagini recente » Cod sursa (job #1415037) | Cod sursa (job #850868) | Cod sursa (job #586076) | Cod sursa (job #1651391) | Cod sursa (job #37943)
Cod sursa(job #37943)
#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;
}