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 }