WA90求调
查看原帖
WA90求调
127823
junjun_ccc楼主2024/1/3 11:06
#include<cstdio>
#include<cstring>
const int N=105;
char s[N];
int f[N][N],v[N][N],n;
inline int num(int x){
    if(x<10)return 1;
    if(x<100)return 2;
    return 3;
}
inline int min(int x,int y){
    return x<y?x:y;
}
int dfs(int l,int r);
int get(int l,int r){
    if(v[l][r])return v[l][r];
    int len=r-l+1;
    v[l][r]=len;
    for(int i=1;i<<1<=len;i++){
        if(!(len%i)){
            bool flag=true;
            for(int j=l+i;flag&&j<r;j+=i)for(int k=0;flag&&k<i;k++)if(s[l+k]^s[j+k])flag=false;
            if(flag)v[l][r]=min(v[l][r],num(len/i)+dfs(l,l+i-1)+2);
        }
    }
    return v[l][r];
}
int dfs(int l,int r){
    if(l==r)return 1;
    if(f[l][r])return f[l][r];
    f[l][r]=get(l,r);
    for(int i=l;i<r;i++)f[l][r]=min(f[l][r],dfs(l,i)+dfs(i+1,r));
    return f[l][r];
}
int main(){
    return scanf("%s",s+1),n=strlen(s+1),printf("%d\n",dfs(1,n)),0;
}

红豆泥阿里嘎多

2024/1/3 11:06
加载中...