Pagini recente » Cod sursa (job #1059301) | Cod sursa (job #2434385) | Cod sursa (job #367710) | Cod sursa (job #87215) | Cod sursa (job #636530)
Cod sursa(job #636530)
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
#define MaxN 500
#define MaxA 26
int bst[MaxN+5][MaxN+5][MaxA+5];
bool viz[MaxN+5][MaxN+5];
char sir[MaxN+5];
int N;
void solve (int i,int j)
{
if (viz[i][j] || i>j)
return ;
viz[i][j]=1;
if (i==j)
{
bst[i][j][sir[i]-'a']=1;
for (int k='z'-1; k>='a'; --k)
bst[i][j][k-'a']=max (bst[i][j][k-'a'],bst[i][j][k-'a'+1]);
return ;
}
if (sir[i]==sir[j])
{
solve (i+1,j-1);
bst[i][j][sir[i]-'a']=bst[i+1][j-1][sir[i]-'a']+2;
for (int k='z'-1; k>='a'; --k)
bst[i][j][k-'a']=max (bst[i][j][k-'a'],bst[i][j][k-'a'+1]);
return ;
}
solve (i,j-1);
solve (i+1,j);
for (int k='z'; k>='a'; --k)
bst[i][j][k-'a']=max (bst[i+1][j][k-'a'],bst[i][j-1][k-'a']);
for (int k='z'-1; k>='a'; --k)
bst[i][j][k-'a']=max (bst[i][j][k-'a'],bst[i][j][k-'a'+1]);
}
int main ()
{
freopen ("palm.in","r",stdin);
freopen ("palm.out","w",stdout);
fgets (sir,MaxN+5,stdin);
N=strlen (sir)-1;
solve (0,N-1);
printf ("%d",bst[0][N-1][0]);
return 0;
}