Pagini recente » Cod sursa (job #2999351) | Cod sursa (job #841862) | Cod sursa (job #1385434) | Cod sursa (job #2195488) | Cod sursa (job #560705)
Cod sursa(job #560705)
#include <stdio.h>
#include <string.h>
#define MAXN 2010
short D[MAXN][MAXN];
int i,j,N;
int aux,aux2,maxim, poz1, poz2;
char S[MAXN];
short A[MAXN], B[MAXN];
inline int max(const int &x, const int &y)
{ return (x<y ? y : x); }
int main()
{
freopen("elimin2.in","r",stdin);
freopen("elimin2.out","w",stdout);
fgets(S, 2010, stdin);
N = strlen(S);
if (S[N-1] < '0') --N;
for (i=0; i<N; ++i){
A[i+1] = S[i] - '0';
B[i+1] = S[N-i-1] - '0';
}
maxim = 0;
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j){
aux = max(D[i][j-1], D[i-1][j]);
if (A[i]==B[j]){
aux2 = D[i-1][j-1];
aux2 = (aux2 / 10 + 1) * 10 + A[i];
aux = max(aux, aux2);
}
D[i][j] = aux;
if (maxim < aux && aux%10!=0){
maxim = aux;
poz1 = i;
poz2 = j;
}
}
i = poz1; j = poz2;
while (i>0 && j>0){
if (A[i] == B[j]){
aux = D[i-1][j-1];
aux = (aux/10+1)*10 + A[i];
if (aux == D[i][j]){
printf("%d", A[i]);
--i;
--j;
}
}
else{
if (D[i][j-1] > D[i-1][j]) --j;
else --i;
}
}
printf("\n");
return 0;
}