Pagini recente » Cod sursa (job #3280833) | Cod sursa (job #1711385) | Cod sursa (job #262317) | Cod sursa (job #1843244) | Cod sursa (job #3293024)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("elimin2.in");
ofstream fout("elimin2.out");
const short alpha = 10;
const short DIM = 2007;
short st[DIM][alpha];
short dr[DIM][alpha];
short dp[DIM][DIM];
void print(short l, short r, short val)
{
if(l > r)
return ;
for(short i = alpha - 1; i >= 0; i--)
if(dp[dr[l][i]][st[r][i]] == val)
{
fout << i;
print(dr[l][i] + 1, st[r][i] - 1, val - 2);
if(val >= 2)
fout << i;
return ;
}
}
main()
{
string s;
fin >> s;
short n = s.size();
s = ' ' + s;
for(short i = 0; i < alpha; i++)
dr[n + 1][i] = n + 1;
for(short i = 1; i <= n; i++)
{
for(short j = 0; j < alpha; j++)
st[i][j] = st[i - 1][j];
st[i][s[i] - '0'] = i;
}
for(short i = n; i >= 1; i--)
{
for(short j = 0; j < alpha; j++)
dr[i][j] = dr[i + 1][j];
dr[i][s[i] - '0'] = i;
}
for(short i = 1; i <= n; i++)
dp[i][i] = 1;
for(short len = 2; len <= n; len++)
for(short i = 1; i + len - 1 <= n; i++)
if(s[i] == s[i + len - 1])
dp[i][i + len - 1] = dp[i + 1][i + len - 2] + 2;
else
dp[i][i + len - 1] = max(dp[i + 1][i + len - 1], dp[i][i + len - 2]);
short res = 0;
for(short i = 1; i < alpha; i++)
if(dr[1][i] != -1)
res = max(res, dp[dr[1][i]][st[n][i]]);
print(1, n, res);
}