60分求调
查看原帖
60分求调
241838
microchip楼主2023/11/13 22:02

样例都过不去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;
}

2023/11/13 22:02
加载中...