#include<iostream>#include<iomanip>usingnamespace std;struct node
{int i,j;};voidMatrixChain(node A[],int m,int**ms);voidprint1(int**ms,int m);///最优值及其最优断开位置数组输出函数voidprint(int**ms,int l,int r);///最优序列输出函数intmain(){int m;
cout<<"Please input the number of matrix:";
cin>>m;
node *A =new node[m+1];
cout<<"Please input all matrixs' dimension(row and column):"<<endl;for(int k =1; k <= m; k++)
cin>>A[k].i>>A[k].j;int**ms =newint*[m+1];for(int i =1; i <= m; i++)
ms[i]=newint[m+1];MatrixChain(A,m,ms);print1(ms,m);
cout<<"\nParentheses sre added in the optimal order as follow:\n";print(ms,1,m);}voidMatrixChain(node A[],int m,int**ms){for(int i =1; i <= m; i++)
ms[i][i]=0;for(int r =2; r <= m; r++)///r表示第r条对角线{int j;for(int i =1; i <= m - r +1; i++)///i用来遍历每条对角线上的元素{
j = i +1+ r -2;
ms[i][j]= ms[i+1][j]+ A[i].i*A[i].j*A[j].j;
ms[j][i]= i;int temp;for(int k = i +1; k < j; k++){
temp = ms[i][k]+ ms[k+1][j]+ A[i].i*A[k].j*A[j].j;if(temp < ms[i][j]){
ms[i][j]= temp;
ms[j][i]= k;}}}}}voidprint1(int**ms,int m){
cout<<"The minimum number of operations to multiply a maxtrix: "<<ms[1][m]<<endl;
cout<<"m[i][j],s[i][j]的值如下图所示,其中下三角全部取零时即m[i][j],上三角全部取零并转置后代表s[i][j]。"<<endl;for(int i =1; i <= m; i++){for(int j =1; j <= m; j++){
cout<<setiosflags(ios::left)<<setw(10)<<ms[i][j];}
cout<<endl;}}voidprint(int**ms,int l,int r){if(l >= r){
cout<<"A"<<l;return;}int mid = ms[r][l];
cout<<"(";print(ms, l, mid);
cout<<")*(";print(ms,(mid+1), r);
cout<<")";}
#include<iostream>#include<iomanip>using namespace std;struct node{ int i,j;};void MatrixChain(node A[], int m, int **ms);void print1(int **ms, int m);///最优值及其最优断开位置数组输出函数void ...