Pagini recente » Cod sursa (job #2200461) | Cod sursa (job #1394364) | Cod sursa (job #836101) | Cod sursa (job #3159206) | Cod sursa (job #1077006)
#include<stdio.h>
#include<string.h>
#define NMAX 105
int v[NMAX];
int dp[NMAX][NMAX];
inline int min(const int &a,const int &b)
{
return a<b?a:b;
}
int main()
{
freopen("bilete.in","r",stdin);
freopen("bilete.out","w",stdout);
int n=0,i,j,k,l;
char c;
while(scanf("%c",&c)!=EOF)
{
if(c=='\n')break;
if(c-'A'+1==v[n])
continue;
v[++n]=c-'A'+1;
}
for(i=0;i<NMAX;++i)
{
for(j=0;j<NMAX;++j)
dp[i][j]=2000000000;
dp[i][i]=1;
}
for(i=n;i>=1;--i)
{
for(j=i+1;j<=n;++j)
{
if(v[i]==v[j])
{
dp[i][j]=1;
l=i;
for(k=i+1;k<=j;++k)
if(v[k]==v[i])
{
dp[i][j]+=dp[l+1][k-1];
l=k;
}
}
else
{
if(i<j-1)
{
dp[i][j]=dp[i+1][j-1]+2;
if(v[i]==v[i+1])
--dp[i][j];
if(v[j]==v[j-1])
--dp[i][j];
}
else
dp[i][j]=2;
//////////////
for(k=i+1;k<j;++k)
{
if(dp[i][k]+dp[k+1][j]<dp[i][j])
{
dp[i][j]=dp[i][k]+dp[k+1][j];
if(v[k]==v[k+1])
--dp[i][j];
if(v[j]==v[j-1])
--dp[i][j];
}
}
}
}
}
printf("%d\n",dp[1][n]);
return 0;
}