爆搜
枚举所有能够断开的位置,用ans记录合法的最大值
#include<iostream>
using namespace std;
const int N=12;
int n,m;
int b[N];
long long ans=0;
long long check(int x,int y){
long long l=0;
while(x<=y){
l=l*10+b[x];
x++;
}
return l;
}
void dfs(int x,int y,long long res){
if(x>m||y>n)return ;
if(x==m){
res=res*check(y,n);
ans=max(ans,res);
return;
}
for(int i=y;i<=n;i++){
int k=res*check(y,i);
dfs(x+1,i+1,k);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
char f;
cin>>f;
b[i]=f-'0';
}
dfs(0,1,1);
cout<<ans;
return 0;
}