zoukankan      html  css  js  c++  java
  • 【ZJ选讲·字符串折叠】

    给一个字符串(len<=100)

    把这个字符串折叠(就是压缩)

    记 X(子串) 表示重复 X次该子串

    比如 3(orz)  orzorzorz 

    来点神奇例子:

    AAAAAAAAAABABABCCD  9(A)3(AB)CCD 

    NEERCYESYESYESNEERCYESYESYES  2(NEERC3(YES))

    【题解】
          ①和上一题《压缩》类似,省去了第三维

       

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    char s[105];
    bool vis[105][105];
    int f[105][105];
    int cal(int x){
    	int cnt=0;
    	while(x) cnt++,x/=10;
    	return cnt;
    }
    bool repeat(int l,int r,int L,int R){
    	if((R-L+1)%(r-l+1)) return 0;
    	for(int i=L,j=l;i<=R;i++,j++){
    		if(j>r) j=l;
    		if(s[i]!=s[j]) return 0;
    	}
    	return 1;
    }
    int dp(int l,int r){
    	if(l==r) return 1;
    	if(vis[l][r]) return f[l][r];
    	vis[l][r]=1; int res=r-l+1;
    	for(int i=l;i<r;i++){
    		res=min(res,dp(l,i)+dp(i+1,r));
    		if(repeat(l,i,i+1,r))
    		res=min(res,dp(l,i)+2+cal((r-l+1)/(i-l+1)));
    	}
    	return f[l][r]=res;
    }
    int main(){
    	scanf("%s",s+1); int len=strlen(s+1);
    	printf("%d",dp(1,len));
    	return 0;
    }//*zj

    .

  • 相关阅读:
    [HAOI2008]糖果传递
    LGTB 与大数
    LGTB 与序列
    poj1160 Post Office
    组队
    [JLOI2015]装备购买
    三元组
    乘法表
    [BZOJ3730]震波
    [Luogu3345][ZJOI2015]幻想乡战略游戏
  • 原文地址:https://www.cnblogs.com/Damitu/p/7771049.html
Copyright © 2011-2022 走看看