乘积最大
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4 typedef long long ll;
5 const int N=10;
6 ll s,f[N][N],a[N][N];
7 int main(){
8 int n,k;
9 cin>>n>>k>>s;
10 //得到a[i][i]
11 for(int i=n;i>0;i--){
12 a[i][i]=s%10;
13 s/=10;
14 }
15 //a[i][j]表示从i到j的值
16 for(int i=1;i<n;i++)
17 for(int j=i+1;j<=n;j++)
18 a[i][j]=a[i][j-1]*10+a[j][j];
19 for(int i=1;i<=n;i++)f[i][0]=a[1][i];
20 //f[i][j]表示前i个数中放j个乘号
21 for(int i=1;i<=n;i++)
22 for(int j=1;j<=k&&j<i;j++)
23 for(int l=i-1;l>0&&l>j-1;l--)//尝试最后一个乘号的位置
24 f[i][j]=max(f[i][j],f[l][j-1]*a[l+1][i]);
25 cout<<f[n][k];
26 return 0;
27 }