Pagini recente » Cod sursa (job #374475) | Cod sursa (job #1775619) | Cod sursa (job #778599) | Cod sursa (job #2349599) | Cod sursa (job #637262)
Cod sursa(job #637262)
#include<fstream>
#include<iostream>
#include<string.h>
using namespace std;
long i,m,act,j,maxim,l,n;
char T[505];
typedef struct { short L[30]; bool A[30]; } litere;
litere P[505][505];
int main()
{
ifstream in("palm.in");
ofstream out("palm.out");
in>>T;
n=strlen(T)-1;
for ( i=0; i<=n; ++i)
{
P[i][i].A[T[i]-'a']=1;
P[i][i].L[T[i]-'a']++;
}
for ( i=1; i<=n; ++i)
{
// j-ul incepe de la 1 pana la n-i
for ( j=0; j<=n-i; ++j)
// pozitia curenta este .. [j][j+i]
{
for ( l=0; l<=28; ++l)
{
maxim=0;
if ( P[j][j+i-1].L[l]>maxim) // - P[j][j+i-1].A[T[j]-'a'
maxim=P[j][j+i-1].L[l];
if ( P[j+1][j+i-1].L[l]>maxim)
maxim=P[j+1][j+i-1].L[l];
if ( P[j+1][j+i].L[l]>maxim) // - P[j+1][j+i].A[T[j]-'a']
maxim=P[j+1][j+i].L[l];
P[j][j+i].L[l]=maxim;
}
if ( T[j]==T[j+i] )
// avem confirmare b-)
{
maxim=0;
for ( l=T[j]-'a'; l<=28; ++l)
{
if ( P[j+1][j+i-1].L[l]>maxim)
maxim=P[j+1][j+i-1].L[l];
}
P[j][j+i].L[T[j]-'a']=maxim+2;
P[j][j+i].A[T[j]-'a']=1;
}
}
}
/*for ( i=0; i<=n; ++i,cout<<"\n")
for ( j=0; j<=n; ++j)
cout<<P[i][j].L[0]<<" ";*/
maxim=0;
for ( i=0; i<=28; ++i)
if ( P[0][n].L[i]>maxim)
maxim=P[0][n].L[i];
out<<maxim;
return 0;
}