Pagini recente » Istoria paginii utilizator/block240 | Cod sursa (job #1497228) | Cod sursa (job #1939940) | Cod sursa (job #966881) | Cod sursa (job #636114)
Cod sursa(job #636114)
#include<fstream>
#include<cstring>
#define NX 550
using namespace std;
struct ceva
{
int x,di,dj;
} mat[NX][NX];
char a[NX],mat2[NX][NX];
int 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].x;
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].x=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+1;
j1=j-1;
mat2[i][j]=a[i];
while (i1&&j1)
{
if (mat[i][j].x<mat[i1][j1].x+2&&(a[i]<=mat2[i1][j1]||!mat2[i1][j1]))
{
mat[i][j].x=mat[i1][j1].x+2;
mat[i][j].di=i1;
mat[i][j].dj=j1;
}
i1=mat[i1][j1].di;
j1=mat[i1][j1].dj;
}
}
else
{
c=mat2[i+1][j];
maxa=mat[i+1][j].x;
mat[i][j].di=i+1;
mat[i][j].dj=j;
if (maxa<mat[i][j-1].x)
{
maxa=mat[i][j-1].x;
c=mat2[i][j-1];
mat[i][j].di=i;
mat[i][j].dj=j-1;
}
mat[i][j].x=maxa;
mat2[i][j]=c;
}
}