Pagini recente » Cod sursa (job #1352539) | Cod sursa (job #640857) | Cod sursa (job #973317) | Cod sursa (job #2936069) | Cod sursa (job #2989802)
#include <bits/stdc++.h>
#define DIM 2005
using namespace std;
ifstream fin("elimin2.in");
ofstream fout("elimin2.out");
int n,lmax;
char s[DIM];
short dp[DIM][DIM], nxt[DIM][10], prv[DIM][10];
void reconst(int st,int dr,int lg){
if(st<=dr)
for(int i = 9; i >= 0; i--)
if (dp[nxt[st][i]][prv[dr][i]] == lg){
fout << i;
reconst(nxt[st][i] + 1, prv[dr][i] - 1, lg - 2);
if(lg >= 2)
fout << i;
return;
}
}
int main() {
fin >> (s + 1);
n = strlen(s + 1);
for(int i = 1; i <= n; i++)
dp[i][i] = 1;
for(int lg = 2; lg <= n; lg++)
for(int i = 1; i <= n - lg + 1; i++){
int j = i + lg - 1;
if(s[i] == s[j])
dp[i][j] = dp[i + 1][j - 1] + 2;
else
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
}
for(int j = 0; j <= 9; j++)
nxt[n + 1][j] = n + 1;
for(int i = n; i >= 1; i--){
for(int j = 0; j <= 9; j++)
nxt[i][j] = nxt[i + 1][j];
nxt[i][s[i] - '0'] = i;
}
for(int i = 1; i <= n; i++){
for(int j = 0; j <= 9; j++)
prv[i][j] = prv[i - 1][j];
prv[i][s[i] - '0'] = i;
}
lmax = 0;
for(int i = 1; i <= 9; i++)
if (dp[nxt[1][i]][prv[n][i]] > lmax)
lmax = dp[nxt[1][i]][prv[n][i]];
reconst(1, n, lmax);
return 0;
}