Pagini recente » Cod sursa (job #2777224) | Cod sursa (job #2374175) | Cod sursa (job #2891842) | Cod sursa (job #2394004) | Cod sursa (job #559566)
Cod sursa(job #559566)
#include <algorithm>
using namespace std;
#define DIM 2001
#define MAX 10
short bst[DIM][DIM],st[MAX][DIM],dr[MAX][DIM];
char buff[DIM];
int N;
inline short max (short a,short b)
{
if (a>b)
return a;
return b;
}
void read ()
{
fgets (buff+1,DIM,stdin);
N=strlen (buff+1)-(buff[strlen (buff+1)]=='\n');
}
void print (int in,int sf,int val)
{
int i;
if (!val)
return ;
for (i=MAX-1; i>=0; --i)
if (bst[dr[i][in]][st[i][sf]]==val)
{
printf ("%d",i);
print (dr[i][in]+1,st[i][sf]-1,val-2);
if (val>1)
printf ("%d",i);
return ;
}
}
void solve ()
{
int lg,i,j,max_val;
for (i=0; i<MAX; ++i)
{
st[i][0]=0;
for (j=1; j<=N; ++j)
if (buff[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 (buff[j]-'0'==i)
dr[i][j]=j;
else
dr[i][j]=dr[i][j+1];
}
for (i=1; i<=N; ++i)
bst[i][i]=1;
for (lg=2; lg<=N; ++lg)
for (i=1; i+lg-1<=N; ++i)
{
j=i+lg-1;
bst[i][j]=max (bst[i+1][j],bst[i][j-1]);
if (buff[i]==buff[j])
bst[i][j]=max (bst[i][j],bst[i+1][j-1]+2);
}
max_val=0;
for (i=MAX-1; i>=1; --i)
max_val=max (max_val,bst[dr[i][1]][st[i][N]]);
print (1,N,max_val);
}
int main ()
{
freopen ("elimin2.in","r",stdin);
freopen ("elimin2.out","w",stdout);
read ();
solve ();
return 0;
}