记录编号 581536 评测结果 AAAAAAAAAA
题目名称 [NOIP 2000PJ]乘积最大 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2023-08-05 08:39:02 内存使用 0.00 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,a[50],f[50][10],k1,ans,num,ui[50];
int dfs(int i,int k2){
    if(i>n){
        return 0;
    }
    if(n-i<k2){
        return 0;
    }
    if(k2==0){
        int x=a[i];
        for(int j=i+1;j<=n;j++){
            x=x*10+a[j];
        }
        f[i][k2]=x;
        return x;
    }
    if(f[i][k2]!=0){
        return f[i][k2];
    }
    f[i][k2]=a[i];
    long long y;
    for(int j=i+1;j<=n;j++){
        y=a[i];
        for(int k=i+1;k<=j-1;k++){
        y=y*10+a[k];
       }
       if(n-j<k2-1){
           continue;
       }
       y=y*dfs(j,k2-1);
       f[i][k2]=max(f[i][k2],y);
    }
    return f[i][k2];
}
int main(){
    freopen("cjzd.in","r",stdin);
    freopen("cjzd.out","w",stdout);
    cin>>n>>k1>>num;
    for(int i=n;i>=1;i--){
        a[i]=num%10;
        num=num/10;
    }
    dfs(1,k1);
        ans=f[1][k1];
    cout<<ans;
    return 0;
}