Pagini recente » Cod sursa (job #285329) | Cod sursa (job #2296706) | Cod sursa (job #2469627) | Cod sursa (job #1720708) | Cod sursa (job #638317)
Cod sursa(job #638317)
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 505;
int i , j , k , n , dp[maxn][maxn][30] , ans;
char A[maxn];
int main()
{
freopen("palm.in","r",stdin);
freopen("palm.out","w",stdout);
scanf("%s",&A);
for ( n = 0 ; A[n] >= 'a' && A[n] <= 'z' ; ++n );
for ( i = 0 ; i < n ; ++i ) {
dp[i][i][ A[i] - 'a'] = 1;
//if ( i + 1 < n && A[i] == A[i + 1])
//dp[i][i + 1] = 1;
}
for ( j = 1 ; j < n ; ++j )
for ( i = 0 ; i < n ; ++i ) {
if ( i + j >= n ) continue;
for ( k = 0 ; k <= 'z' - 'a' ; ++k )
dp[i][i + j][k] = max ( dp[i + 1][i + j][k] , dp[i][i + j - 1][k]);
if ( A[i] == A[i + j] ) {
int t = 0;
for ( k = A[i] - 'a' ; k <= 'z' - 'a' ; ++k )
t = max ( t , dp[i + 1][i + j - 1][k] );
dp[i][i + j][ A[i] - 'a'] = max ( dp[i][i + j][A[i] - 'a'] , t + 2);
}
}
for ( i = 0 ; i < n ; ++i )
for ( j = i ; j < n ; ++j )
for ( k = 'a' ; k <= 'z' ; ++k )
ans = max ( ans , dp[i][j][k - 'a']);
printf("%d\n",ans);
return 0;
}