社区讨论

70 pts 求调

题目总版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo2hlg7t
此快照首次捕获于
2023/10/23 13:58
2 年前
此快照最后确认于
2023/10/23 13:58
2 年前
查看原帖
CPP
#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...