Pagini recente » Cod sursa (job #232963) | Cod sursa (job #2622295) | Cod sursa (job #2970863) | Cod sursa (job #2114988) | Cod sursa (job #635862)
Cod sursa(job #635862)
Utilizator |
Duta Vlad Vman |
Data |
19 noiembrie 2011 15:19:28 |
Problema |
PalM |
Scor |
90 |
Compilator |
cpp |
Status |
done |
Runda |
.com 2011 |
Marime |
1.01 kb |
#include <cstdio>
#include <cstring>
#define alfa 28
#define Lmax 512
int N, i, j, k, p, best;
char S[Lmax], L[Lmax][Lmax][alfa];
inline int max(int a, int b) { return a>b?a:b; }
int main()
{
freopen("palm.in","r",stdin);
freopen("palm.out","w",stdout);
scanf("%s\n", S);
N = strlen(S);
for (i=0; i<N; ++i)
{
L[i][i][S[i]-'a'] = 1;
for (k=26; k>=0; --k)
L[i][i][k] = max(L[i][i][k], L[i][i][k+1]);
}
best = 1;
for (p=1; p<N; ++p)
for (i=0; i+p<N; ++i)
{
j = i+p;
for (k=26; k>=0; --k)
{
L[i][j][k] = L[i][j][k+1];
L[i][j][k] = max( L[i][j][k], max(L[i+1][j][k], L[i][j-1][k]) );
if (S[i] == S[j] && S[i]-'a' == k) L[i][j][k] = max( L[i][j][k], L[i+1][j-1][S[i]-'a'] + 2 );
best = max(best, L[i][j][k]);
}
}
printf("%d\n", best);
return 0;
}