Pagini recente » Cod sursa (job #3261806) | Cod sursa (job #1137020) | Cod sursa (job #2893375) | Cod sursa (job #247264) | Cod sursa (job #1696907)
#include<stdio.h>
#include<string.h>
#define maxim(a,b) (a>b ? a : b)
short int d[2005][2005],sol,n;
int dr[10][2005],st[10][2005];
char s[2005];
void recur(int inc,int sf,int lg)
{
int i;
if(lg<1)
return ;
for(i=9;i>=0;i--)
if(d[dr[i][inc]][st[i][sf]]==lg)
{
printf("%d",i);
recur(dr[i][inc]+1,st[i][sf]-1,lg-2);
if(lg>1)
printf("%d",i);
return ;
}
}
int main ()
{
int i,j,l;
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
for(i=1;i<=n;i++)
d[i][i]=1;
for(l=1;l<n;l++)
for(i=1;i<=n-l;i++)
{
j=i+l;
d[i][j]=maxim(d[i+1][j],d[i][j-1]);
if(s[i]==s[j])
d[i][j]=maxim(d[i][j],d[i+1][j-1]+2);
}
for(i=0;i<=9;i++)
{
for(j=1;j<=n;j++)
if(s[j]-'0'==i)
st[i][j]=j;
else
st[i][j]=st[i][j-1];
dr[i][n+1]=n+1;
for(j=n;j>=1;j--)
if(s[j]-'0'==i)
dr[i][j]=j;
else
dr[i][j]=dr[i][j+1];
}
for(i=1;i<=9;i++)
sol=maxim(sol,d[dr[i][1]][st[i][n]]);
recur(1,n,sol);
printf("\n");
return 0;
}