Pagini recente » Cod sursa (job #1427231) | Cod sursa (job #539374) | Cod sursa (job #608856) | Cod sursa (job #1991741) | Cod sursa (job #637652)
Cod sursa(job #637652)
#include <cstdio>
#include <cstring>
#include <string>
#define MAXN 502
using namespace std;
int N;
char s[MAXN+ 5];
int S[MAXN];
int dp[27][MAXN][MAXN];
int main() {
freopen("palm.in", "r", stdin);
freopen("palm.out", "w", stdout);
gets(s + 1);
N = strlen(s + 1);
for(int i = 1; i <= N; i++)
S[i] = (s[i] - 'a');
for(int i = 1; i <= N; i++) {
dp[S[i]][i][i] = 1;
}
// return 0;
for(int i = N; i >= 1; i--) {
for(int j = i + 1; j <= N; j++) {
int st, dr;
st = i; dr = j;
if(S[st] == S[dr]) {
int mx = 0;
for(int k = S[st]; k < 26; k++)
mx = max(mx, dp[k][st + 1][dr - 1]);
dp[S[st]][st][dr] = mx + 2;
}
for(int k = 0; k < 26; k++)
dp[k][st][dr] = max(max(dp[k][st][dr], dp[k][st + 1][dr]), dp[k][st][dr - 1]);
}
}
/*
for(int k = 0; k < 26; k++) {
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= N; j++)
printf("%d ", dp[k][i][j]);
printf("\n");
}
printf("\n");
}
*/
int mx = 0, lit = 0;
for(int k = 0; k < 26; k++)
if(mx < dp[k][1][N]) {
mx = dp[k][1][N];
lit = k;
}
// printf("%d\n", dp[0][3][5]);
printf("%d\n", mx);
return 0;
}