样例都过不去QAQ
#include<bits/stdc++.h>
using namespace std;
int f[150][150];
string s;
bool check(int st,int ed,int len){
for(int i=0;i<len;i++)
for(int j=st+i;j<=ed-len;j+=len)
if(s[j]!=s[j+len])return 0;
return 1;
}
int num_siz(int x){
if(x<=9)return 1;
if(x<=99)return 2;
return 3;
}
int main()
{
cin>>s;
for(int i=0;i<s.size();i++)
for(int j=0;j<s.size();j++)f[i][j]=21474836;
for(int i=0;i<s.size();i++)f[i][i]=1;
for(int k=2;k<=s.size();k++){//子串长度
for(int i=0;i+k-1<=s.size();i++){//子串起点
for(int j=i;j-i<k;j++)f[i][i+k-1]=min(f[i][i+k-1],f[i][j]+f[j+1][i+k-1]);//中截点
for(int j=1;j<=k;j++){
if(k%j)continue;
if(check(i,i+k-1,j))f[i][i+k-1]=min(f[i][i+k-1],num_siz(k/j)+j+2);
}
}
}
cout<<f[0][s.size()-1];
return 0;
}