70 pts 求助
查看原帖
70 pts 求助
688783
SilverLi楼主2023/6/3 18:22
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=105;
int n,num[N];
int f[N][N];
string s;
inline bool check(int l1,int r1,int l2,int r2) {
	int k=l1;
	for(int i=l2;i<=r2;++i) {
		if(s[i]!=s[k++]) return 0;
		if(k>r1)    k=l1;
	}
	return 1;
}
signed main() {
	cin>>s;
	n=s.size();
	s=" "+s;
	for(int i=1;i<=n;++i)   num[i]=num[i/10]+1;
	for(int i=1;i<=n;++i)   f[i][i]=1;
	for(int l=1;l<=n;++l)
		for(int i=1;i+l-1<=n;++i) {
			int j=i+l-1;
			f[i][j]=l;
			for(int k=i;k<j;++k) {
				f[i][j]=min(f[i][j],
				f[i][k]+f[k+1][j]);
				if(check(i,k,k+1,j))
					f[i][j]=min(f[i][j],
					f[i][k]+num[l/(k-i+1)]+2);
			}
		}
	cout<<f[1][n];
	return 0;
}
2023/6/3 18:22
加载中...