问题描述:矩阵A和B可乘的条件是A的列数等于B的行数。若A是一个p×q矩阵,B是一个q×r矩阵,则其乘积C=AB是一个p×r矩阵。在计算矩阵乘积的标准算法中,主要计算量为p×q×r次数乘。
由于矩阵的乘法满足结合律,故计算矩阵的连乘积有许多不同的计算次序。
给定n个矩阵{ A1,A2,……,An },其中Ai和Ai+1是可乘的,i=1,2,……,n-1,求计算其连乘积A1×A2×……×An的最小乘法次数
输入格式:
第1行为一个正整数n,表示n个矩阵相乘,n≤100。
第2行为n+1个整数p0p1……pn,其中pi-1pi为矩阵Ai的行数和列数。
样例输入:
C++代码:
#include<iostream>
using namespace std;
#define MAX 100
int m[MAX][MAX];
int s[MAX][MAX];
void MatrixChain(int *p, int n)
{
for (int i = 1; i <= n; i++)
m[i][i] = 0;
for (int r = 2; r <= n; r++)
for (int i = 1; i <= n - r + 1; i++) {
int j = i + r - 1;
m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j];
s[i][j] = i;
for (int k = i + 1; k < j; k++) {
int t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];