Pagini recente » Cod sursa (job #2515729) | Cod sursa (job #3227975) | Cod sursa (job #1729970) | Cod sursa (job #1827199) | Cod sursa (job #1804527)
#include<bits/stdc++.h>
using namespace std;
ifstream f("elimin2.in");
ofstream g("elimin2.out");
short i,j,maxi,nm,n,k,v[1<<11],d[1<<11][1<<11],P[1<<11][11],U[1<<11][11];
char s[1<<11];
inline void afis(short x,short y)
{
if(x>y||!x) return ;
if(x==y)
{
g<<v[x];
return ;
}
if(v[x]==v[y]) g<<v[x];
for(i=9;i>=0;--i)
if(d[P[x+1][i]][U[y-1][i]]+2==d[x][y])
{
afis(P[x+1][i],U[y-1][i]);
break;
}
if(v[x]==v[y]) g<<v[x];
}
int main()
{
f>>(s+1);
n=strlen(s+1);
for(i=1;i<=n;++i) v[i]=s[i]-'0';
for(i=1;i<=n;++i)
{
for(j=0;j<=9;++j) U[i][j]=U[i-1][j];
U[i][v[i]]=i;
}
for(i=n;i;--i)
{
for(j=0;j<=9;++j)
P[i][j]=P[i+1][j];
P[i][v[i]]=i;
}
for(i=1;i<=n;++i) d[i][i]=1;
for(k=2;k<=n;++k)
for(j=k;j<=n;++j)
{
i=j-k+1;
if(v[i]==v[j]) d[i][j]=d[i+1][j-1]+2;
else d[i][j]=max(d[i+1][j],d[i][j-1]);
}
maxi=1;
for(i=1;i<=n;++i)
if(v[i]>v[maxi]) maxi=i;
nm=i;
for(i=10;i;--i)
if(d[P[1][i]][U[n][i]]>d[maxi][nm]) maxi=P[1][i],nm=U[n][i];
afis(maxi,nm);
return 0;
}