Pagini recente » Cod sursa (job #1758183) | Cod sursa (job #2092068) | Cod sursa (job #1496427) | Cod sursa (job #1544373) | Cod sursa (job #637037)
Cod sursa(job #637037)
#include<cstdio>
#include<cstring>
const int N = 502;
const int K = 28;
int n, d[N][N][K];
char s[N];
inline int max(int x, int y) {
return x > y ? x : y;
}
void rez() {
for (int i = 0; i <= n; ++i)
d[i][i][s[i] - 'a'] = 1;
for (int i = n - 1; i >= 0; --i)
for (int j = i + 1; j <= n; ++j)
if (s[i] == s[j])
for (int k = s[i] - 'a'; k < 26; ++k)
d[i][j][s[i] - 'a'] = max(d[i][j][s[i] - 'a'], d[i + 1][j - 1][k] + 2);
else
for (int k = s[i] - 'a'; k < 26; ++k) {
d[i][j][s[i] - 'a'] = max(d[i][j][s[i] - 'a'], d[i][j - 1][k]);
if (i > 0)
d[i][j][s[i] - 'a'] = max(d[i][j][s[i] - 'a'], d[i - 1][j][k]);
}
int lgmax = 0;
for (int i = 0; i <= n; ++i)
for (int k = 0; k < 26; ++k)
lgmax = max(lgmax, d[i][n][k]);
printf("%d\n", lgmax);
}
int main() {
freopen("palm.in", "r", stdin);
freopen("palm.out", "w", stdout);
gets(s);
n = strlen(s) - 1;
rez();
return 0;
}