#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=55;
const int INF=0x3f3f3f3f;
int n;
char s[N];
int f[N][N];
int ne[N],la[N];
int dfs(int l,int r)
{
if(l==r)return 1;
if(l==r-1)return s[l]==s[r]?1:2;
if(f[l][r]!=-1)return f[l][r];
int res=INF;
if(s[l]==s[r])
{
res=1;
for(int i=l;i<=r;++i)
{
if(s[i]==s[l])continue;
int j=i;
while(j<r && s[j+1]!=s[l])++j;
res+=dfs(i,j);
i=j;
}
}
for(int i=l;i<r;++i)
res=min(res,dfs(l,i)+dfs(i+1,r));
return f[l][r]=res;
}
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
s[0]='#';
//s[n+1]='#';
for(int i=1;i<=n;++i)
{
for(int j=i+1;j<=n+1;++j)
if(s[j]!=s[i]){ne[i]=j;break;}
// for(int j=i-1;j>=0;--j)
// if(s[j]!=s[i]){la[i]=j;break;}
}
memset(f,-1,sizeof f);
printf("%d\n",dfs(1,n));
return 0;
}
不知道这样做为什么不对