#include#include #include #include using namespace std; /* *矩阵连乘(备忘录方法:自顶向下递归) */ vector > m;//m[i][j]表示矩阵Ai连乘到Aj的最少运算次数 vector > s;//s[i][j]记录矩阵Ai和矩阵Aj之间的分割点 //计算该连乘式子的最佳结合方式 int MatrixChain(vector & p,int beg, int end) { if(m[beg][end]>0) return m[beg][end]; if(beg==end) return 0; int u = MatrixChain(p,beg,beg)+MatrixChain(p,beg+1,end)+p[beg-1]*p[beg]*p[end]; s[beg][end] = beg; for (int K = beg+1; K vec; copy(istream_iterator(cin),istream_iterator (),back_inserter(vec)); int n = vec.size()-1;//一共有n个矩阵相乘 m = vector >(n+1,vector (n+1,0));//0行0列空余 s = vector >(n+1,vector (n+1,0));//0行0列空余 //初始化m数组 for(int i = 0;i<=n;i++) m[i][i] = 0; int u = MatrixChain(vec,1,n); cout<<"最优解为计算"< ![]()