Pagini recente » Cod sursa (job #891845) | Cod sursa (job #1084564) | Cod sursa (job #560028) | Cod sursa (job #498006) | Cod sursa (job #294490)
Cod sursa(job #294490)
#include <cstdio>
#include <cstring>
#define lm 2002
char v[lm], s[lm];
short a[lm][lm], n, m;
short max(short a, short b)
{
if (a<b) a=b;
return a;
}
void sol(short l, short r, short k, short t)
{
short i, c, p, q;
for (c=9; c>=0; c--)
{
p=0;
for (p=l; p<=r; p++)
if (v[p]==c) break;
q=0;
if (p)
for (i=r; i>=p; i--)
if (v[i]==c)
{
q=i;
break;
}
if (q && p)
if (a[p][q-p+1]==t)
{
s[k]=c;
s[m-k+1]=c;
if (p+1<=q-1 && t>2) sol(p+1,q-1,k+1,t-2);
break;
}
}
}
int main()
{
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
scanf("%s",v);
short i,j;
n=strlen(v);
for (i=n; i>0; i--) v[i]=v[i-1]-'0';
for (i=1; i<=n; i++) a[i][1]=1;
for (i=2; i<=n; i++)
for (j=1; j+i-1<=n; j++)
{
a[j][i]=max(a[j][i-1],a[j+1][i-1]);
if (v[j]==v[j+i-1]) a[j][i]=max(a[j][i],a[j+1][i-2]+2);
}
int p, q;
for (i=9; i>0; i--)
{
p=0;
for (p=1; p<=n; p++)
if (v[p]==i) break;
q=0;
if (p)
for (q=n; q>=p; q--)
if (v[q]==i) break;
if (p && q)
if (a[p][q-p+1]>m)
{
m=a[p][q-p+1];
s[1]=i;
}
}
s[m]=s[1];
sol(1,n,1,m);
for (i=1; i<=m; i++) printf("%d",s[i]);
}