题解

1 条题解

  • 0
    @ 2022-07-04 20:29:24
    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll t,n,m,a[20],f[20][20];//前i个数划分成j段的最大值
    ll sum(ll l,ll r) {
        ll ans=0;
        for(ll i=l; i<=r; i++) {
            ans=ans*10+a[i];
        }
        return ans;
    }
    int main() {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--) {
            memset(a,0,sizeof(a));
            memset(f,0,sizeof(f));
            string s;
            cin>>s>>m;//以字符串的形式读入数据 
            n=s.size();
            for(ll i=0; i<n; i++) {
                a[i+1]=s[i]-'0';//分解出每个位置的数字 
            }
            for(ll i=1; i<=n; i++) {
                f[i][1]=sum(1,i);//状态初值,前i个数字不分段 
            }
            for(ll i=1; i<=n; i++) {
                for(ll j=2; j<=m&&j<=i; j++) {
                    for(ll k=j-1; k<i; k++) {
                        f[i][j]=max(f[i][j],f[k][j-1]*sum(k+1,i));
                    }
                }
            }
            cout<<f[n][m]<<endl;
        }
        return 0;
    }
    
    
  • 1

信息

ID
1253
难度
7
分类
动态规划 点击显示
标签
递交数
1
已通过
1
通过率
100%
上传者