Pagini recente » Cod sursa (job #2800674) | Cod sursa (job #3234263) | Cod sursa (job #8651) | Cod sursa (job #3138692) | Cod sursa (job #930551)
Cod sursa(job #930551)
#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;
}