Pagini recente » Cod sursa (job #1385259) | Cod sursa (job #1031862) | Cod sursa (job #1830261) | Cod sursa (job #2048792) | Cod sursa (job #2944744)
#include <fstream>
#include <cstring>
#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;
}