Pagini recente » Cod sursa (job #877853) | Cod sursa (job #2169320) | Cod sursa (job #2762585) | Cod sursa (job #1720971) | Cod sursa (job #1240057)
#include <iostream>
#include <cstdio>
#include <string>
#define nmax 505
using namespace std;
string s;
int i,j,n,k,a[nmax][nmax][27],sir[nmax];
int main(){
freopen("palm.in", "r", stdin);
freopen("palm.out", "w", stdout);
getline(cin,s);
n=s.size();
for (i=1; i<=n; i++)
sir[i]=int(s[i-1])-96;
for (i=1; i<=n; i++)
for (k=sir[i]; k; k--) a[i][i][k]=1;
for (i=1; i<n; ++i){
if (sir[i]==sir[i+1])
for (k=sir[i]; k; k--) a[i][i+1][k]=2;
else
for (k=max(sir[i],sir[i+1]); k; k--) a[i][i+1][k]=1;
}
for (int L=3; L<=n; L++)
for (i=1; i<=n-L+1; i++){
int p=i+L-1;
for (k=26; k; k--){
if (k==sir[i]&&k==sir[p])
a[i][p][k]=a[i+1][p-1][k]+2;
else
a[i][p][k]=max(a[i+1][p-1][k],max(a[i][p-1][k],a[i+1][p][k]));
}
for (k=25; k; k--) a[i][p][k]=max(a[i][p][k],a[i][p][k+1]);
}
printf("%d",a[1][n][1]);
return 0;
}