Pagini recente » Cod sursa (job #2152694) | Cod sursa (job #729027) | Cod sursa (job #743078) | Cod sursa (job #200905) | Cod sursa (job #636075)
Cod sursa(job #636075)
#include<fstream>
#include<cstring>
#define NX 550
using namespace std;
char a[NX],mat2[NX][NX];
int mat[NX][NX],lg,s;
ifstream f("palm.in");
ofstream g("palm.out");
void read();
void initialise();
void solve();
int main()
{
read();
initialise();
solve();
g<<mat[0][lg-1];
f.close();
g.close();
return 0;
}
void read()
{
f.getline(a,NX);
lg=strlen(a);
}
void initialise()
{
int i;
for (i=0;i<lg;++i)
{
mat[i][i]=1;
mat2[i][i]=a[i];
}
}
void solve()
{
int k,i,j,maxa,c;
for (k=1;k<lg;++k)
for (i=0,j=k;j<lg;++i,++j)
if (a[i]==a[j])
{
int i1,j1;
i1=i;
j1=j;
mat2[i][j]=a[i];
while (i1<=j1)
{
if (mat[i][j]<mat[i1][j1]+2&&(a[i]<=mat2[i1][j1]||!mat2[i1][j1]))
mat[i][j]=mat[i1][j1]+2;
i1++;
j1--;
}
}
else
{
c=mat2[i+1][j];
maxa=mat[i+1][j];
if (maxa<mat[i][j-1])
{
maxa=mat[i][j-1];
c=mat2[i][j-1];
}
mat[i][j]=maxa;
mat2[i][j]=c;
}
}