Pagini recente » Cod sursa (job #1644516) | Cod sursa (job #1747873) | Cod sursa (job #3140996) | Cod sursa (job #1511416)
#include <fstream>
#include <string.h>
#define nMax 2005
using namespace std;
ifstream fin("elimin2.in");
ofstream fout("elimin2.out");
short int st[nMax][10], dr[nMax][10], dp[nMax][nMax], len;
int n, i, j, fr;
char s[nMax];
void go(int lo, int hi, int len)
{
if(len<=0)
return;
for(int j=9;j>=0;j--)
{
if(dp[st[lo][j]][dr[hi][j]]==len)
{
fout<<j;
go(st[lo][j]+1, dr[hi][j]-1, len-2);
if(len>1)
fout<<j;
return;
}
}
}
int main()
{
fin>>s+1;
n=strlen(s+1);
for(i=1;i<=n;i++)
{
for(j=0;j<=9;j++)
dr[i][j]=dr[i-1][j];
dr[i][s[i]-'0']=i;
}
for(i=n;i>=1;i--)
{
for(j=0;j<=9;j++)
st[i][j]=st[i+1][j];
st[i][s[i]-'0']=i;
}
for(i=1;i<=n;i++)
dp[i][i]=1;
for(fr=1;fr<n;fr++)
for(i=1;i+fr<=n;i++)
{
j=i+fr;
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(j=1;j<=9;j++)
len=max(len, dp[st[1][j]][dr[n][j]]);
go(1, n, len);
return 0;
}