Pagini recente » Cod sursa (job #1344490) | Cod sursa (job #2485790) | Cod sursa (job #380946) | Cod sursa (job #1535549) | Cod sursa (job #1476193)
#include <iostream>
#include <string.h>
#include <stdio.h>
#define NMax 2051
using namespace std;
int L[NMax][NMax],St[NMax][NMax],Dr[NMax][NMax],N,sol,X;
char S[NMax];
void Write(int st,int dr,int X)
{
if(X<=0)
return;
for(int i=9;i>=0;i--)
if(L[Dr[st][i]][St[dr][i]]==X)
{
printf("%d",i);
Write(Dr[st][i]+1,St[dr][i]-1,X-2);
if(X>1)
printf("%d",i);
return;
}
}
int main()
{
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
fgets(S+1,NMax,stdin);
N=strlen(S+1)-1;
for(int i=1;i<=N;i++)
{
for(int j=0;j<10;j++)
St[i][j]=St[i-1][j];
St[i][S[i]-'0']=i;
}
for(int i=N;i>=1;i--)
{
for(int j=0;j<10;j++)
Dr[i][j]=Dr[i+1][j];
Dr[i][S[i]-'0']=i;
}
for(int i=1;i<=N;i++)
L[i][i]=1;
for(int lenght=2;lenght<=N;lenght++)
for(int i=1;i+lenght-1<=N;i++)
{
int j=i+lenght-1;
L[i][j]=max(L[i+1][j],L[i][j-1]);
if(S[i]==S[j])
L[i][j]=max(L[i][j],L[i+1][j-1]+2);
}
for(int i=1;i<=9;i++)
sol=max(sol,L[Dr[1][i]][St[N][i]]);
Write(1,N,sol);
}