1 条题解

  • 1
    @ 2023-12-8 12:53:08
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    const int inf=0x3f3f3f3f;
    char str[N];
    int f[N][N];
    int calc(int x){
    	int res=0;
    	while(x){
    		res++;
    		x/=10;
    	}
    	return res;
    }
    int check(int l,int r,int len){
    	for(int i=l+len;i<=r;i++){
    		if(str[i]!=str[i-len]){
    			return 0;
    		}
    	}
    	return 1;
    }
    int main(){
    	scanf("%s",str+1);
    	int n=strlen(str+1);
    	memset(f,0x3f,sizeof(f));
    	for(int i=1;i<=n;i++){
    		f[i][i]=1;
    	}
    	for(int l=2;l<=n;l++){
    		for(int i=1;i<=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]);
    			}
    			for(int k=i;k<j;k++){
    				if((j-i+1)%(k-i+1)!=0)continue;
    				if(!check(i,j,k-i+1))continue;
    				f[i][j]=min(f[i][j],f[i][k]+2+calc((j-i+1)/(k-i+1)));
    			}
    		}
    	}
    	printf("%d",f[1][n]);
    	return 0;
    }
    
    • 1

    信息

    ID
    1090
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    24
    已通过
    12
    上传者