#include <stdio.h>
#include <limits.h>
int m[7][7];
int s[7][7];
void matrixChainOrder(int p[],int len)
{
int n=len-1,q;
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]=INT_MAX;
for(int k=i;k<j;k++)
{
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(q<m[i][j])
{
m[i][j]=q;
s[i][j]=k;
}
}
}
}
}
void printS(int i,int j)
{
if(i==j)
printf("A%d",i);
else
{
printf("(");
printS(i,s[i][j]);
printS(s[i][j]+1,j);
printf(")");
}
}
void main()
{
int p[7]={30,35,15,5,10,20,25};
matrixChainOrder(p,7);
printf("%d\n",m[1][6]);
printS(1,6);
getchar();
}算法导论 矩阵链乘法
最新推荐文章于 2024-06-24 10:21:13 发布
本文介绍了一种针对矩阵链乘法的优化算法,通过动态规划技术寻找最优的矩阵相乘顺序,以减少不必要的计算开销。文章展示了具体的实现代码,包括初始化矩阵、计算最小代价、打印最优解等步骤。

2478

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



