Cod sursa(job #635862)

Utilizator VmanDuta Vlad Vman Data 19 noiembrie 2011 15:19:28
Problema PalM Scor 90
Compilator cpp Status done
Runda .com 2011 Marime 1.01 kb
#include <cstdio>
#include <cstring>

#define alfa 28
#define Lmax 512

int N, i, j, k, p, best;
char S[Lmax], L[Lmax][Lmax][alfa];

inline int max(int a, int b) { return a>b?a:b; }

int main()
{
    freopen("palm.in","r",stdin);
    freopen("palm.out","w",stdout);
    
    scanf("%s\n", S);
    N = strlen(S);
    
    for (i=0; i<N; ++i)
    {
        L[i][i][S[i]-'a'] = 1;
        for (k=26; k>=0; --k)
            L[i][i][k] = max(L[i][i][k], L[i][i][k+1]);
    }
        
    best = 1;
    for (p=1; p<N; ++p)
        for (i=0; i+p<N; ++i)
        {
            j = i+p;
            for (k=26; k>=0; --k)
            {
                L[i][j][k] = L[i][j][k+1];
                L[i][j][k] = max( L[i][j][k], max(L[i+1][j][k], L[i][j-1][k]) );
                if (S[i] == S[j] && S[i]-'a' == k) L[i][j][k] = max( L[i][j][k], L[i+1][j-1][S[i]-'a'] + 2 );
                best = max(best, L[i][j][k]);
            }            
        }
    
    printf("%d\n", best);
 
    return 0;
}