#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
struct Number{
int a[400],len;
void cl(){
len=1;memset(a,0,sizeof(a));
}
Number(){cl();}
Number(string str){
cl();
len=str.length();
for(int i=0;i<str.length();i++) a[i]=str[str.length()-1-i]-'0';
}
};//数组开到这能AC
Number operator*(Number x,Number y){
Number ret;
ret.len=x.len+y.len;
for(int i=0;i<x.len;i++)
for(int j=0;j<y.len;j++){
ret.a[i+j]+=x.a[i]*y.a[j];
ret.a[i+j+1]+=ret.a[i+j]/10;
ret.a[i+j]%=10;
}
while(!ret.a[ret.len-1]&&ret.len>1) ret.len--;
return ret;
}
Number Max(Number x,Number y){
if(x.len>y.len) return x;
else if(x.len<y.len) return y;
else{
for(int i=x.len-1;i>=0;i--)
if(x.a[i]<y.a[i]) return y;
else if(x.a[i]>y.a[i]) return x;
}
return x;
}
void print(Number x){
for(int i=x.len-1;i>=0;i--) printf("%d",x.a[i]);
printf("\n");
}
int main(){
int n,k;
Number dp[70][10],num[70][70];
scanf("%d%d",&n,&k);
k++;
string str;
cin>>str;
for(int i=0;i<str.length();i++)
for(int j=i;j<str.length();j++){
Number tmp=str.substr(i,j-i+1);
num[i+1][j+1]=tmp;
}
for(int i=1;i<=str.length();i++){
Number tmp=str.substr(0,i);
dp[i][1]=tmp;
}
for(int j=2;j<=k;j++)
for(int i=1;i<=n;i++)
for(int p=0;p<i;p++){
dp[i][j]=Max(dp[i][j],dp[p][j-1]*num[p+1][i]);
}
print(dp[n][k]);
return 0;
}
如果num和dp数组到结构体上面可以AC,开到主函数里就RE