记录编号 |
581536 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2000PJ]乘积最大 |
最终得分 |
100 |
用户昵称 |
健康铀 |
是否通过 |
通过 |
代码语言 |
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;
}