Cod sursa(job #1129399)

Utilizator gbi250Gabriela Moldovan gbi250 Data 27 februarie 2014 22:00:08
Problema PalM Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define SIZE 512
#define SIZE_ALPHA 26
using namespace std;

char s[SIZE];
int len, MAX, chr[SIZE], DP[SIZE_ALPHA + 1][SIZE][SIZE];


int main()
{
    freopen("palm.in", "r", stdin);
    freopen("palm.out", "w", stdout);

    gets( s );

    len = strlen( s + 1 );

    for(int i = 0; i <= len; ++i)
    {
        chr[ i ] = s[ i ] - 'a';
        DP[ chr[i] ][ i ][ i ] = 1; // palind munte care incepe pe poz i, se termina pe poz i si incepe cu caracterul chr[i]
    }


    for(int left = len - 1; left >= 0; --left)
        for(int right = left + 1; right <= len; ++right)
        {
            if( chr[ left ] == chr[ right ])
            {
                int max_temp = 0;
                for( int i = chr[left]; i < SIZE_ALPHA; ++i)
                    max_temp = max( max_temp, DP[ i ][ left + 1 ][ right - 1]);
                DP[ chr[ left ] ][ left ][ right ] = max_temp + 2;
            }

            for(int i = 0; i < SIZE_ALPHA; ++i)
                DP[ i ][ left ][ right ] = max( DP[ i ][ left ][ right ], max ( DP[ i ][ left + 1 ][ right ], DP[ i ][ left ][ right - 1 ] ) );
        }

    for(int i = 0; i < SIZE_ALPHA; ++i)
        MAX = max( MAX, DP[ i ][ 0 ][ len ]);

    printf("%d\n", MAX);

    return 0;
}