求调
查看原帖
求调
782210
Yu_Chengxuan楼主2024/7/20 20:00
#include <bits/stdc++.h>
using namespace std;

string s;
int f[110][110];
inline bool check(int l,int r,int len){
	for (int i=l;i<=r;i++){
		if (s[i]!=s[(i-l)%len+l]) return false;
	}
	return true;
}
inline int fx(int x){
	if (x==100) return 3;
	if (x>9 && x<100) return 2;
	if (x<=9) return 1; 
}
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=1;len<=n;len++){
		for (int l=1;l<=n-len+1;l++){
			int r=l+len-1;
			for (int k=l;k<n;k++){
				f[l][r]=min(f[l][r],f[l][k]+f[l+1][r]);
			}
			for (int k=l;k<n;k++){
				int tmp=k-l+1;
				if(!(len%tmp)){
                    if(check(l,r,tmp)){
					    f[l][r]=min(f[l][r],(f[l][k]+fx(l/tmp)+2));
				    }
				}    
			}
		}
	}
	cout << f[1][n];
}
2024/7/20 20:00
加载中...