求助
查看原帖
求助
550957
Anonymely楼主2022/7/16 16:27
#include<bits/stdc++.h>
using namespace std;

#define ll long long

int n;
int dp[105][105];
int num[105];
char ch[105];

bool check(char s[],int l,int len) {
	for (int i=len; i<l; i++) {
		if (s[i]!=s[i%len])return false;
	}
	return 0;
}

signed main() {
	memset(dp,0x3f,sizeof(dp));
	scanf("%s",ch);
	n=strlen(ch);
	//cout<<-1<<endl;
	for (int i=0; i<n; i++) dp[i][i]=1;
	for (int i=1; i<=100; i++) num[i]=num[i/10]+1;
	for (int len=2; len<=n; len++) {
		for (int i=0,j=len+i-1; j<n; i++,j++) {
			//cout<<len<<endl;
			//if (j>n) break;
			//dp[i][j]=len+1;
			for (int k=i; k<j; k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
			for (int k=i; k<j; k++) {
				int l=k-i+1;
				if (len%l!=0) continue;
				if (check(ch+i, len, l)) dp[i][j]=min(dp[i][j], dp[i][k]+2+num[len/l]);
			}
		}
	} 
	cout<<dp[0][n-1]/2;
} 

没过样例ww

2022/7/16 16:27
加载中...