Pagini recente » Cod sursa (job #2758738) | Cod sursa (job #88633) | Cod sursa (job #1380584) | Cod sursa (job #2418356) | Cod sursa (job #633816)
Cod sursa(job #633816)
Utilizator |
Mr. Noname cezar305 |
Data |
14 noiembrie 2011 21:43:01 |
Problema |
PalM |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.86 kb |
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 505, A = 30;
char s[N];
int n, d[N][N][A];
inline int max(int x, int y) {
return x > y ? x : y;
}
int solve() {
n = strlen(s + 1);
for (int i = n; i >= 1; --i) {
d[i][i][s[i] - 'a'] = 1;
for (int k = 24; k >= 0; --k)
d[i][i][k] = max(d[i][i][k], d[i][i][k + 1]);
for (int j = i + 1; j <= n; ++j) {
for (int k = 0; k < 26; ++k) {
d[i][j][k] = max(d[i][j - 1][k], d[i + 1][j][k]);
if (s[i] == s[j] && s[i] - 'a' == k)
d[i][j][k] = (d[i + 1][j - 1][k] + 2);
}
for (int k = 24; k >= 0; --k)
d[i][j][k] = max(d[i][j][k], d[i][j][k + 1]);
}
}
return d[1][n][0];
}
int main() {
freopen("palm.in", "r", stdin);
freopen("palm.out", "w", stdout);
gets(s + 1);
printf("%d", solve());
return 0;
}