Pagini recente » Cod sursa (job #881981) | Cod sursa (job #1897306) | Cod sursa (job #876413) | Cod sursa (job #25736) | Cod sursa (job #2633087)
#include <bits/stdc++.h>
#define maxn 2005
std::ifstream fin ("elimin2.in");
std::ofstream fout ("elimin2.out");
std::string a;
int dp[maxn][maxn], n;
int left[maxn][10], right[maxn][10];
void print (int l, int r, int len){
if (len <= 0)
return;
for (int i=9; i>=0; i--){
if (dp[right[l][i]][left[r][i]] == len){
fout << i;
print (right[l][i]+1, left[r][i]-1, len-2);
if (len > 1)
fout << i;
return;
}
}
}
int main()
{
int i, j, len;
fin >> a;
n = a.size();
for (i=1; i<=n; i++){
for (j=0; j<=9; j++)
left[i][j] = left[i-1][j];
left[i][a[i-1]-'0'] = i;
}
for (i=n; i>=1; i--){
for (j=0; j<=9; j++)
right[i][j] = right[i+1][j];
right[i][a[i-1]-'0'] = i;
}
for (i=1; i<=n; i++)
dp[i][i] = 1;
for (len=1; len<n; len++){
for (i=1; i+len <= n; i++){
j = i + len;
if (a[i-1] == a[j-1])
dp[i][j] = dp[i+1][j-1] + 2;
else
dp[i][j] = std::max (dp[i+1][j], dp[i][j-1]);
}
}
int max = 0;
for (i=1; i<9; i++)
max = std::max (max, dp[right[1][i]][left[n][i]]);
//fout << max << '\n';
print (1, n, max);
return 0;
}