Pagini recente » Cod sursa (job #1908452) | Cod sursa (job #780776) | Cod sursa (job #2554754) | Cod sursa (job #2508776) | Cod sursa (job #1129408)
#include <fstream>
#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()
{
ifstream fin("palm.in");
fin >> 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 ]);
ofstream fout("palm.out");
fout << MAX;
return 0;
}