查看原帖
730948
__zyh__楼主2024/12/28 15:40

死亡回放
代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long 
string s;
int n,dp[110][110];
inline int number(int x){
	if(x==0)return 1;
	int cnt=0;
	while(x!=0){
		x/=10;
		cnt++;
	}
	return cnt;
}
inline bool check(int l,int r,int len){
	for(int i=l;i+len<r;i++){
		if(s[i]!=s[i+len])return false;
	}
	return true;
}
signed main(){
	cin>>s;
	n=s.size();
	for(int i=1;i<=n;i++)dp[i][i]=1;
	for(int i=2;i<=n;i++){
		for(int l=1,r=i;r<=n;l++,r++){
		    dp[l][r]=i;
			for(int k=l;k<r;k++)dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
			for(int k=2;k<=i;k++){
		        if(i%k==0&&check(l,r,k))
		        	dp[l][r]=min(dp[l][r],number(i/k)+dp[l][l+k-1]+2);
	        }
		}
	}
	cout<<dp[1][n];
	return 0;
}

有大佬能帮忙看看代码吗?

2024/12/28 15:40
加载中...