#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 110
using namespace std;
bool col[N][N][2];
int f[N][N][2];
char s[N];
void init()
{
memset(f,0x3f,sizeof(f));
}
int calc(int l,int r,int way)
{
if(l==r)return 1;
if(col[l][r][way])return f[l][r][way];
col[l][r][way]=1;
int len=r-l+1;
if(way)
{
for(int i=l;i<r;i++)
{
int tmp1=calc(l,i,1),tmp2=calc(i+1,r,1);
f[l][r][way]=min(f[l][r][way],tmp1+tmp2+1);
}
}
for(int i=l;i<r;i++)
{
int tmp1=calc(l,i,0),tmp2=r-i;
f[l][r][way]=min(f[l][r][way],tmp1+tmp2);
}
int ll=l,rr=r;
int lenlen=(rr-ll+1)/2;
int flag=1,mid;
if(!((rr-ll+1)&1))
{
mid=(ll+rr)>>1;
for(int i=ll;i<=mid;i++)
{
if(s[i]!=s[i+lenlen]){flag=0;break;}
}
}else flag=0;
if(flag)
{
int tmp=calc(l,mid,0);
f[l][r][way]=min(f[l][r][way],tmp+1);
}
return f[l][r][way];
}
int main()
{
scanf("%s",s+1);
int len=strlen(s+1);
init();
printf("%d\n",calc(1,len,1));
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wzq_qwq/article/details/47054569