矩陣連乘(備忘錄方法:自頂向下遞歸)
#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<<"最優解為計算"<