WA on #4 #11 #12 #13
#include<bits/stdc++.h>
using namespace std;
int n,K;
string s,dp[45][10];
string Max(string a,string b){
if(a.size()!=b.size()) return (a.size()>b.size()?a:b);
return (a>b?a:b);
}
string getans(int l,int r){
bool flag=0;
string a;
for(int i=l;i<=r;i++){
if(!flag&&s[i]=='0') continue;
flag=1;
a+=s[i];
}
return a;
}
string cheng(string a,string b){
int x[1005]={},y[1005]={},z[1005]={},len=a.size()+b.size();
string c;
for(int i=0;i<a.size();i++) x[a.size()-i]=a[i]-'0';
for(int i=0;i<b.size();i++) y[b.size()-i]=b[i]-'0';
for(int i=1;i<=a.size();i++){
for(int j=1;j<=b.size();j++){
z[i+j-1]+=x[i]*y[j];
z[i+j]+=z[i+j-1]/10;
z[i+j-1]%=10;
}
}
if(!z[len]) len--;
for(int i=len;i>=1;i--) c+=char(z[i]+'0');
return c;
}
int main(){
cin>>n>>K>>s;
s=' '+s;
for(int i=1;i<=n;i++){
dp[i][0]=getans(1,i);
}
for(int i=1;i<=K;i++){
for(int j=i+1;j<=n;j++){
for(int k=1;k<j;k++){
dp[j][i]=Max(dp[j][i],cheng(dp[k][i-1],getans(k+1,j)));
}
}
}
cout<<dp[n][K];
return 0;
}