Pagini recente » Cod sursa (job #1276969) | Cod sursa (job #778048) | Cod sursa (job #1740164) | Cod sursa (job #215316) | Cod sursa (job #1761623)
#include <bits/stdc++.h>
using namespace std;
char s[502];
int n;
int dp[502][502][27];
int main() {
freopen("palm.in", "r", stdin);
freopen("palm.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
for(int i = 0; i < n; ++i)
s[i] -= 'a';
for(int c = 25; c >= 0; --c) {
for(int i = 0; i < n; ++i)
if(s[i] == c)
dp[i][i][c] = 1;
if(c != 25) {
for(int i = 0; i < n; ++i)
for(int j = i; j < n; ++j)
dp[i][j][c] = max(dp[i][j][c], dp[i][j][c + 1]);
}
for(int l = 2; l <= n; ++l) {
for(int i = 0; i + l - 1 < n; ++i) {
int j = i + l - 1;
bool ok1 = s[i] < c, ok2 = s[i] < c;
if(ok1 || ok2) {
dp[i][j][c] = dp[i + ok1][j - ok2][c];
}
else if(s[i] == s[j]) {
dp[i][j][c] = 2 + dp[i + 1][j - 1][max({c, (int)s[i], (int)s[j]})];
}
dp[i][j][c] = max({dp[i][j][c], dp[i + 1][j][c], dp[i][j - 1][c]});
}
}
}
printf("%d", dp[0][n - 1][0]);
return 0;
}