输入:n个矩阵A1,A2,…,An,其中Ai的维数为pi-1×pi
Ai 和Ai+1是可乘的
输出:连乘积A1A2A3…An
//矩阵连乘
//p为下标矩阵,n个矩阵,m记录需要乘的次数,s记录划分的k的位置
void matrix_chain(int p[], int n, int m[][n], int s[][n]) {
// 初始化 m 和 s
for (int i = 0; i < n; i++) {
m[i][i] = 0;
s[i][i] = 0;
}
// 动态规划计算最小计算次数
//r是连乘个数
for (int r = 2; r <= n; r++) {
for (int i = 0; i <= n - r; i++) {
int j = i + r - 1;
m[i][j] = INT_MAX; // 初始化为无穷大
for (int k = i; k < j; k++) {
int q = m[i][k] + m[k + 1][j] + p[i] * p[k + 1] * p[j];
if (q < m[i][j]) {
m[i][j] = q;
s[i][j] = k;
}
}
}
}
}