Cod sursa(job #642431)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 1 decembrie 2011 12:46:00
Problema PalM Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#include <string.h>
char v[505];
int dp[505][505][26];
int main()
{
	freopen("palm.in","r", stdin);
	freopen("palm.out","w", stdout);
	scanf("%s",v);
	int max,n,i,d,j,k,l;
	n=strlen(v);
	n--;
	for(i=0;i<=n;i++)
		dp[i][i][v[i]-96]=1;
	for(d=2;d<=n;d++)
	{
		for(i=0;i+d-1<n;i++)
		{
			j=i+d-1;
			for(k=0;k<=25;k++)
			{
				if(v[i]==v[j] && v[i]-96==k)
				{
					for(l=k;l<=25;l++)
					{
						if (dp[i][j][k]<2+dp[i+1][j-1][l])
							dp[i][j][k]=2+dp[i+1][j-1][l];
					}
				}
				else
				{		
					dp[i][j][k]=dp[i+1][j][k];
					if (dp[i][j][k]<dp[i][j-1][k])
						dp[i][j][k]=dp[i][j-1][k];
				}
			}
		}
	}
	max=0;
	for(i=0;i<=25;i++) 
		if (max<dp[0][n-1][i])
			max=dp[0][n-1][i];
	printf("%d",max);	
	return 0;
}