Pagini recente » Cod sursa (job #3124681) | Cod sursa (job #814556) | Cod sursa (job #293151) | Cod sursa (job #3178653) | Cod sursa (job #2635084)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("elimin2.in");
ofstream cout ("elimin2.out");
int n;
char s[2005];
int dp[2005][2005], l[2005][10], r[2005][10];
void solve(int a, int b, int val) {
if(val <= 0)
return;
for(int i = 9; i >= 0; i--) {
if(dp[r[a][i]][l[b][i]] == val) {
cout << i;
solve(r[a][i] + 1, l[b][i] - 1, val - 2);
if(val != 1)
cout << i;
break;
}
}
}
int main() {
cin >> (s + 1);
n = strlen(s + 1);
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= 9; j++)
l[i][j] = l[i - 1][j];
l[i][s[i] - '0'] = i;
}
for(int i = n; i >= 1; i--) {
for(int j = 0; j <= 9; j++)
r[i][j] = r[i + 1][j];
r[i][s[i] - '0'] = i;
}
for(int i = n; i >= 1; i--) {
dp[i][i] = 1;
for(int j = i + 1; j <= n; j++) {
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]);
}
}
int ans = 0;
for(int i = 1; i <= 9; i++)
ans = max(ans, dp[r[1][i]][l[n][i]]);
solve(1, n, ans);
return 0;
}