Pagini recente » Cod sursa (job #1461238) | Cod sursa (job #1915337) | Cod sursa (job #92954) | Cod sursa (job #1918794) | Cod sursa (job #2470382)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("elimin2.in");
ofstream g("elimin2.out");
int ant[2005][11],urm[2005][11],n;
short dp[2005][2005];
char s[2005];
inline void calc()
{
for(int i=1;i<=n;i++)
{
for(int j=9;j>=0;j--)
{
ant[i][j]=ant[i-1][j];
}
ant[i][s[i]-'0']=i;
}
for(int i=n;i>=1;i--)
{
for(int j=9;j>=0;j--)
{
urm[i][j]=urm[i+1][j];
}
urm[i][s[i]-'0']=i;
}
}
void rezolva()
{
for(int i=1;i<=n;i++) dp[i][i]=1;
for(int l=2;l<=n;l++)
{
for(int i=1;i+l-1<=n;i++)
{
if(s[i]==s[i+l-1])
dp[i][i+l-1]=dp[i+1][i+l-2]+2;
else
{
dp[i][i+l-1]=max(dp[i+1][i+l-1],dp[i][i+l-2]);
}
}
}
}
void afis(int st,int dr,int val)
{if(st>dr) return ;
for(int i=9;i>=0;i--)
{
if(dp[urm[st][i]][ant[dr][i]]==val) {
g<<i;
afis(urm[st][i]+1,ant[dr][i]-1,val-2);
if(val>=2) g<<i;
return ;
}
}
}
int main()
{
f>>(s+1);
n=strlen(s+1);
calc();
rezolva();
int maxim=0;
for(int i=1;i<=n;i++)
{
maxim=max(maxim,(int)dp[urm[1][i]][ant[n][i]]);
}
afis(1,n,maxim);
}