Pagini recente » Cod sursa (job #2936374) | Cod sursa (job #854715) | Cod sursa (job #80932) | Cod sursa (job #2884171) | Cod sursa (job #637346)
Cod sursa(job #637346)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 512
#define Sigma 28
using namespace std;
char s[Nmax];
int p[Nmax], a[Nmax][Nmax][Sigma],N;
//lungimea maxima a palindromului sa inceapa pe poz i, sa se termine pe poz j si
//sa aiba literele din margine c
int main(){
freopen("palm.in","r",stdin);
freopen("palm.out","w",stdout);
fgets(s,Nmax,stdin);
N=strlen(s);
for(int i=0;i<N;++i)
p[i]=s[i]-'a';
for(int i=N-1;i>=0;--i)
for(int j=i;j<N;++j){
int c=p[j];
if(i==j)
a[i][j][c]=1;
else
//daca litera curenta egala cu prima litera
if(p[i]==c)
for(int l=c;l<=25;++l)
if(a[i+1][j-1][l]!=0 || (i+1)>(j-1))
a[i][j][c]=max(a[i][j][c],a[i+1][j-1][l]+2);
for(int c=0;c<=25;++c)
for(int l=c;l<=25;++l)
a[i][j][c]=max(a[i][j][c],max(a[i+1][j][l],a[i][j-1][l]));
}
int sol=0;
for(int i=0;i<N;++i)
for(int j=i;j<N;++j)
for(int l=25;l>=0;--l)
sol=max(sol,a[i][j][l]);
printf("%d",sol);
return 0;
}