Pagini recente » Cod sursa (job #699800) | Cod sursa (job #99361) | Cod sursa (job #2040122) | Cod sursa (job #998446) | Cod sursa (job #874275)
Cod sursa(job #874275)
#include <fstream>
using namespace std;
#define LE 666
int DP[3][LE][29];
ifstream f ( "palm.in" );
ofstream g ( "palm.out" );
#define inf 1<<26
int i, j, t;
string s;
int len, A[LE];
int main()
{
f >> s;
int N = s.length();
for ( i = 0; i < N; ++i )
{
A[i+1] = s[i] - 'a';
for ( j = A[i+1]; j >= 0; --j ) DP[1][i+1][j] = 1;
}
for ( len = 1; len <= N; ++len )
{
for ( j = 1; j + len <= N; ++j )
{
if ( A[j] == A[j+len] )
DP[2][j][A[j]] = max ( DP[2][j][A[j]], DP[0][j+1][A[j]] + 2 );
for ( t = 26; t >= 0; --t )
{
DP[2][j][t] = max ( DP[2][j][t], max ( DP[1][j][t], DP[1][j+1][t] ) );
DP[2][j][t] = max ( DP[2][j][t], DP[2][j][t+1] );
}
}
for ( j = 1; j <= N; ++j )
for ( t = 0; t <= 26; ++t )
{
int AA = DP[1][j][t];
DP[1][j][t] = DP[2][j][t];
DP[0][j][t] = AA;
DP[2][j][t] = -inf;
}
}
g << max(DP[1][1][0],DP[0][1][0]) << '\n';
f.close();
g.close();
return 0;
}