题目链接
#include<bits/stdc++.h>
using namespace std;
string f[101][101],s;
int m[1001],n[1001],c[1001];
string gets(int l,int r){
return s.substr(l,r-l+1);
}
string mul(string a,string b){
int lena=a.size(),lenb=b.size(),x;
for(int i=1;i<=lena;i++)
m[i]=a[lena-i]-'0';
for(int i=1;i<=lenb;i++)
n[i]=b[lenb-i]-'0';
for(int i=1;i<=lena+lenb;i++)
c[i]=0;
for(int i=1;i<=lenb;i++){
x=0;
for(int j=1;j<=lena;j++){
c[i+j-1]+=m[j]*n[i]+x;
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lena]=x;
}
string k;
bool p=0;
for(int i=lena+lenb;i>0;i--)
if(c[i]!=0){
for(int j=i;j>0;j--){
k+=c[j]+48;
}
p=1;
break;
}
if(p==0)
return "0";
return k;
}
int main(){
int n,k;
cin>>n>>k;
cin>>s;
s = " "+s;
for(int i = 1;i <= n;i++){
f[i][0] = gets(1,i);
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= k;j++){
for(int d = 1;d <= i;d++){
f[i][j] = max(f[i][j],mul(f[d][j-1],gets(d+1,i)));
}
}
}
cout<<f[n][k];
}