1 条题解

  • 0
    @ 2025-2-14 21:20:42

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    char s[101];
    int f[101][101];
    bool u[101][101];
    
    bool jud(int l,int r,int cl,int cr)
    {
        if((r-l+1)%(cr-cl+1)) return false;
         
        for(int i=l;i<=r;i++)
        {
        	if(s[i]!=s[(i-l)%(cr-cl+1)+cl]) return false;
    	}
        
        return true;
    }
    
    int match(int x)
    {
    	int t=0;
    	
    	while(x)
    	{
    		x/=10;
    		t++;
    	}
    	
    	return t;
    }
    
    int dp(int l,int r)
    {
        if(l==r)
    	{
    		return 1;
    	}
        else
    	{
    		if(u[l][r])
    		{
    			return f[l][r];
    		}
    		else
    		{
    		    u[l][r]=1;
    		    int t=r-l+1;
    		    
    		    for(int i=l;i<r;i++)
    		    {
    		        t=min(t,dp(l,i)+dp(i+1,r));
    		        
    		        if(jud(i+1,r,l,i))
    		        {
    		        	t=min(t,dp(l,i)+2+match((r-i)/(i-l+1)+1));
    		        }
    			}
    			
    		    return f[l][r]=t;
    		}
    	}
    }
    
    int main()
    {
        scanf("%s",s);
        
        printf("%d",dp(0,strlen(s)-1));
        
        return 0;
    }
    
    • 1

    信息

    ID
    838
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者