用c++写一个矩阵连乘
时间: 2023-07-01 20:15:48 浏览: 92
好的,以下是用C++实现矩阵连乘的代码:
```c++
#include<iostream>
using namespace std;
const int MAXN = 205;
const int INF = 0x3f3f3f3f;
int n;
int m[MAXN][MAXN], s[MAXN][MAXN], p[MAXN];
void matrix_chain_order(){
for(int i=1; i<=n; i++) m[i][i] = 0;
for(int l=2; l<=n; l++){
for(int i=1; i<=n-l+1; i++){
int j = i + l - 1;
m[i][j] = INF;
for(int k=i; k<j; k++){
int tmp = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if(tmp < m[i][j]){
m[i][j] = tmp;
s[i][j] = k;
}
}
}
}
}
void print_optimal_parens(int i, int j){
if(i == j) cout<<'A'<<i;
else{
cout<<'(';
print_optimal_parens(i, s[i][j]);
print_optimal_parens(s[i][j]+1, j);
cout<<')';
}
}
int main(){
cin>>n;
for(int i=0; i<=n; i++) cin>>p[i];
matrix_chain_order();
cout<<m[1][n]<<endl;
print_optimal_parens(1, n);
return 0;
}
```
该程序的输入格式为:
第一行为矩阵的数量 $n$;
第二行为 $n+1$ 个整数 $p_0, p_1, ..., p_n$,表示矩阵的大小;
输出格式为:
第一行为最小计算量;
第二行为最优计算顺序。
例如,对于输入数据:
```
6
30 35 15 5 10 20 25
```
程序的输出为:
```
15125
((A1(A2A3))((A4A5)A6))
```
阅读全文