Pagini recente » Cod sursa (job #1131000) | Cod sursa (job #323655) | Cod sursa (job #2641743) | Cod sursa (job #438859) | Cod sursa (job #637282)
Cod sursa(job #637282)
#include<stdio.h>
#include<string.h>
#define MaxN 510
#define MaxS 31
int N,MAX,A[MaxN][MaxN][MaxS],B[MaxN];
char S[MaxN],S2[MaxN];
int max(int a,int b)
{
return a>b ? a:b;
}
void cmlsc(int N,int M)
{
int MAX;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
{
for(int k=0;k<=26;k++)
A[i][j][k] = max(A[i-1][j][k],A[i][j-1][k]);
MAX = 0;
if(S[i-1] == S2[j-1])
{
for(int k=0;k<=S2[j-1]-'a';k++)
if(A[i-1][j-1][k] > MAX)
MAX = A[i-1][j-1][k];
}
A[i][j][S2[j-1]-'a'] = max(MAX+1,A[i][j][S2[j-1]-'a']);
}
}
void Ad(int a,int b)
{
for(int j=1;j<=a;j++)
for(int k=1;k<=b;k++)
for(int l=0;l<=26;l++)
A[j][k][l] = 0;
}
void Bb(void)
{
for(int i=1;i<=N;i++)
{
for(int j=0;j<=26;j++)
if(2*A[i-1][N-i-1][j]+1 > B[i])
B[i] = 2*A[i-1][N-i-1][j]+1;
}
}
int main()
{
FILE *f = fopen("palm.in","r");
FILE *g = fopen("palm.out","w");
fgets(S,sizeof(S),f);
N = strlen(S);
for(int i=0;i<N;i++)
S2[N-i-2] = S[i];
cmlsc(N,N);
Bb();
for(int i=1;i<=N;i++)
if(B[i] > MAX)
MAX = B[i];
fprintf(g,"%d ",MAX);
fclose(g);
fclose(f);
return 0;
}