Pagini recente » Cod sursa (job #814596) | Cod sursa (job #714916) | Cod sursa (job #965151) | Cod sursa (job #1710935) | Cod sursa (job #635930)
Cod sursa(job #635930)
#include <cstdio>
#include <cstring>
#define nmax 510
char s[nmax];
short n, dr[30][nmax], st[30][nmax], v[nmax][nmax][30];
int main()
{
freopen("palm.in","r",stdin);
freopen("palm.out","w",stdout);
fgets(s, nmax, stdin);
n=strlen(s);
int i, j, d, c, x, y;
for (i=n; i>0; i--) s[i]=s[i-1]-'a'+1;
for (c=1; c<=26; c++)
{
for (i=1; i<=n; i++)
if (s[i]==c) st[c][i]=i; else st[c][i]=st[c][i-1];
dr[c][n+1]=nmax;
for (i=n; i>0; i--)
if (s[i]==c) dr[c][i]=i; else dr[c][i]=dr[c][i+1];
}
for (d=1; d<=n; d++)
for (i=1; i+d-1<=n; i++)
{
j=i+d-1;
for (c=26; c>0; c--)
{
x=dr[c][i];
y=st[c][j];
if (x<y) v[i][j][c]=v[x+1][y-1][c]+2; else
if (x==y) v[i][j][c]=1;
if (v[i][j][c+1]>v[i][j][c]) v[i][j][c]=v[i][j][c+1];
}
}
printf("%d\n",v[1][n][1]);
}