Pagini recente » Cod sursa (job #913601) | Cod sursa (job #1700802) | Cod sursa (job #1003568) | Cod sursa (job #1438503) | Cod sursa (job #639751)
Cod sursa(job #639751)
#include<fstream>
#include<cstring>
using namespace std;
int i,j,n,d[501][501],m,l[501],n2,rez,max1=0,ok1,max2;
char a[501],b[501],c,p[501],t[501];
int main()
{
ifstream f("palm.in");
FILE *g=fopen("palm.out","w");
i=1;
while(f>>c)
a[i++]=c;
n=i-1;
for(i=1;i<=n;i++)
b[n-i]=a[i];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i]==b[j])
d[i][j]=d[i-1][j-1]+1;
else
d[i][j]=max(d[i-1][j],d[i][j-1]);
i=j=n;
while(i>=1)
if(a[i]==b[j])
p[++m]=a[i],l[m]=(int)p[m-1]-(int)p[m],j--,i--;
else
if(d[i-1][j]>d[i][j-1])
i--;
else
j--;
if(m%2)
n2=m/2+1;
else
n2=m/2;
/*for(i=1;i<=m;i++)
fprintf(g,"%c",p[i]);
fprintf(g,"\n");*/
int k,mij,pp;
max1=0;
for(k=1;k<=n2;++k)
{
i=1;
j=max1;
pp=0;
while(i<=j)
{
mij=(i+j)/2;
if(t[mij]>p[k])
{
pp=mij;
j=mij-1;
}
else
if(t[mij]<p[k])
i=mij+1;
else
{
pp=mij;
break;
}
}
if(pp==0)
{
++max1;
pp=max1;
}
t[pp]=p[k];
}
//for(i=0;i<=max1;i++)
//fprintf(g,"%c",t[0]);
//fprintf(g,"\n");
if((n2%2==0&&m%2)||(n2%2&&m%2==0))//||m%2)
fprintf(g,"%d",max1*2-1);
else
fprintf(g,"%d",max1*2);
return 0;
}