跟老师一样的,老师过了,为啥我的样例都不对啊,真的快疯了,求助万能的洛谷!
#include <bits/stdc++.h>
using namespace std;
const int N=110;
string s;
int f[N][N];
bool check(int l,int r,int x){
for(int i=l+x;i<=r;i++){
if(s[i]!=s[i-x])
return false;
}
return true;
}
int main()
{
cin>>s;
int n=s.size();
s=" "+s;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)
f[i][i]=1;
for(int len=2;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int k=i;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
for(int k=i;k<j;k++){
int x=k-i+1;
if(len%x)
continue;
if(check(i,j,x)){
int t;
if(len/x<10)
t=1;
if(len/x<100)
t=2;
else
t=3;
f[i][j]=min(f[i][j],f[i][k]+2+t);
}
}
}
}
cout<<f[1][n];
return 0;
}