Pagini recente » Cod sursa (job #2981175) | Cod sursa (job #338981) | Cod sursa (job #912432) | Cod sursa (job #42299) | Cod sursa (job #637339)
Cod sursa(job #637339)
#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 = 0; k <= S[st]; k++)
mx = max(mx, dp[k][st + 1][dr - 1]);
dp[S[st]][st][dr] = mx + 2;
}
if(S[st] != S[dr]) {
int mxst, mxdr;
for(int k = 0; k < 26; k++) {
mxst = mxdr = 0;
mxst = max(mxst, dp[k][st][dr - 1]);
mxdr = max(mxdr, dp[k][st + 1][dr]);
dp[k][st][dr] = max(mxdr, mxst);
}
}
}
}
int mx = 0;
for(int k = 0; k < 26; k++)
mx = max(dp[k][1][N], mx);
printf("%d\n", mx * 2 - 1);
return 0;
}