Pagini recente » Cod sursa (job #1921805) | Cod sursa (job #288222) | Cod sursa (job #2395011) | Cod sursa (job #2515886) | Cod sursa (job #1482996)
#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;
}