#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();
}
算法导论 矩阵链乘法
最新推荐文章于 2022-09-16 22:35:22 发布