#include<iostream>
#include<cstring>
using namespace std;
const int maxsize = 1000;
int p[maxsize] = { 0 };
int num[1000][2] = { 0 };
int m[maxsize][maxsize], s[maxsize][maxsize];//m[i][j]存储最优解
int n;
void MatrixChain()
{
int i, r, j, k;
for (r = 2; r <= n; r++)//矩阵连乘的规模为r ,从2开始
{
for (i = 1; i <= n - r + 1; i++)//最大可起始点
{
j = i + r - 1;//j-i=r-1;
m[i][j] = 0x7f7f7f7f;//另开始时m[i][j]为无穷大;
for (k = i; k < j; k++)//寻找最优值
{
m[i][j]= min(m[i][j],m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]);//求出分割点为k时的乘积
}
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> num[i][0] >> num[i][1];
}
p[0] = num[0][0];
for (int i = 0; i < n; i++)
{
p[i + 1] = num[i][1];
}
MatrixChain();
cout << m[1][n] << endl;
}
中国矿业大学——算法作业2——矩阵连乘
最新推荐文章于 2025-12-04 23:33:43 发布
该程序实现了一个矩阵链的连乘问题,通过动态规划找到最小代价的乘法顺序。输入矩阵的维度,程序计算并输出最优解的代价。
5068

被折叠的 条评论
为什么被折叠?



