思路:根据乘号的位置进行暴力枚举,在枚举数目时剪枝,即该数的末尾不得超过未放置乘号的个数即可
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int ans = 0;
string s;
int n,k;
void dfs(int cur,int num,int pos){//第一维为当前值,第二维为✖的个数,第三维为枚举的位置
if(pos == s.size()&&num == k+1){
ans = max(ans,cur);
return;
}
for(int i=pos;i<n;i++){
for(int j=1;j<=n-(k-num)&&j<n;j++){
string temp = s.substr(i,j);
int tt = stoi(temp);
dfs(cur*tt,num+1,i+j);
}
}
}
int main(){
cin>>n>>k;
cin>>s;
dfs(1,0,0);
cout<<ans<<endl;
return 0;
}