1275:【例9.19】乘积最大

乘积最大

 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 }

 

posted @ 2021-08-21 16:11  Rekord  阅读(435)  评论(0编辑  收藏  举报