Pagini recente » Cod sursa (job #2194689) | Cod sursa (job #538606) | Cod sursa (job #2655510) | Cod sursa (job #1976204) | Cod sursa (job #1901905)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[2001],sol[2001];
int i,j,n,m,k,s1,d1,q1;
short int a[2001][2001],st[2001][10],dr[2001][10];
void detnr(int x,int y,int val)
{
if(y-x<=1)
return;
if(y-x==2)
{
sol[s1]=s[x+1];
return ;
}
short int best=0;
int i;
for(i=9;i>=val;i--)
best=max(best,a[dr[x+1][i]][st[y-1][i]]);
for(i=9;i>=val;i--)
if(a[dr[x+1][i]][st[y-1][i]]==best)
{
if(val!=0)
{
q1=best;
s1=0;
d1=best-1;
}
sol[s1]=sol[d1]=i+'0';
s1++;
d1--;
detnr(dr[x+1][i],st[y-1][i],0);
break;
}
}
int main ()
{
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
gets(s);
n=strlen(s);
for(i=n;i>=1;i--)
s[i]=s[i-1];
for(i=1;i<=n;i++)
a[i][i]=1;
for(j=2;j<=n;j++)
for(i=1;i<=n-j+1;i++)
{
int q=i+j-1;
a[i][q]=max(short(a[i+1][q-1]+2*(s[i]==s[q])),max(a[i+1][q],a[i][q-1]));
}
for(i=1;i<=n;i++)
{
for(j=0;j<=9;j++)
st[i][j]=st[i-1][j];
st[i][s[i]-'0']=i;
}
for(i=n;i>=1;i--)
{
for(j=0;j<=9;j++)
dr[i][j]=dr[i+1][j];
dr[i][s[i]-'0']=i;
}
detnr(0,n+1,1);
puts(sol);
return 0;
}