Pagini recente » Cod sursa (job #2846021) | Cod sursa (job #1648072) | Cod sursa (job #3149269) | Cod sursa (job #1571320) | Cod sursa (job #635976)
Cod sursa(job #635976)
#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();
int solve(int i,int j);
int main()
{
read();
initialise();
g<<solve(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];
}
}
int solve(int i,int j)
{
/*if (i==3&&j==5)
++s;
if (i==2&&j==6)
++s;*/
if (i<0||j<0)
return 0;
if (mat[i][j]) return mat[i][j];
else
if (a[i]==a[j])
{
int z;
z=solve(i+1,j-1);
if (a[i]<=mat2[i+1][j-1])
{ mat[i][j]=z+2; mat2[i][j]=a[i]; }
else
{
int maxx,y;
char c;
maxx=solve(i+1,j); c=mat2[i+1][j];
y=solve(i,j-1);
if (maxx<y)
{ maxx=y; c=mat2[i][j-1];}
mat[i][j]=maxx; mat2[i][j]=c;
}
}
else
{
int maxx,y;
char c;
maxx=solve(i+1,j); c=mat2[i+1][j];
y=solve(i,j-1);
if (maxx<y)
{ maxx=y; c=mat2[i][j-1];}
mat[i][j]=maxx; mat2[i][j]=c;
}
return mat[i][j];
//return 0;
}