Cod sursa(job #679232)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 12 februarie 2012 22:03:25
Problema PalM Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <cstring>

# define dim 505
# define dim2 28
using namespace std;

int a[ dim ][ dim ][ dim2 ];
char sir[ dim ];
int main()
{
    ifstream f("palm.in");
    ofstream g("palm.out");

    f.getline( sir + 1, 510 );
    int n = strlen( sir + 1 );

    int sol = 0;
    for ( int i = 1 ; i <= n ; ++i )
    {
        for ( int j = i ; j <= n ;++j )
        {
            int st = j - i + 1 ,dr = j;
            if( sir[ st ] == sir[ dr ] )
            {
				if ( st != dr )
					a[ st ][ dr ][ sir [ st ] -'a' ] = max( a[ st ][ dr ][ sir[ st ] - 'a' ] , 2 );
				else
					a[ st ][ dr ][ sir [ st ] -'a' ] = max( a[ st ][ dr ][ sir[ st ] - 'a' ] , 1 );
                if( i > 2)
                    for( int l = sir[ st ] - 'a' ; l < 26 ; ++l )
                        a[ st ][ dr ][ sir[ st ] - 'a' ] = max ( a[ st ][ dr ][ sir[ st ] -'a' ] , a[ st + 1 ][ dr - 1 ][ l ] + 2 );
            }
            if( i > 1 )
                for( int l = 0 ; l < 26 ; ++l )
                    a[ st ][ dr ][ l ] = max( a[ st ][ dr ][ l ] , max( a[ st ][ dr - 1 ][ l ] , a[ st + 1 ][ dr ][ l ] ) );
        }
    }

    /*for ( int i = 1 ; i <= n ; ++i )
        for ( int j = i ; j <= n ; ++j )
        {
            g << i << ' ' << j;
            g << '\n';
            for( int l = 0 ; l < 26 ; ++l )
                g << a[ i ][ j ][ l ] <<' ';
            g <<'\n';
        }*/
    for( int i = 1 ; i <= n ; ++i )
        for( int j = i ;j <= n ; ++j )
            for( int k = 0 ; k < 26 ; ++k )
                if( a[ i ][ j ][ k ] > sol )
					sol = a[ i ][ j ][ k ];

    g << sol;
    return 0;
}