题目:
6个矩阵相乘,求需要乘法的最少数目。
A30X35 A35X15 A15X5 A5X10 A10X20 A20X25 (分别对应A1 A2 A3 A4 A5 A6, 后面是下标)
参考代码:
#include<stdio.h>
const int P[7]= {30,35,15,5,10,20,25};
const int length=6;
int m[7][7]={0}; // m[i][j] 代码第i个数乘到第j个数(第一个数为i=1)
int s[7][7]={0};
void Pri(int s[][7],int i,int j)
{
if(i==j)
printf("A%d",i);
else
{
printf("(");
Pri(s,i,s[i][j]);
printf(") (");
Pri(s,s[i][j]+1,j);
printf(") ");
}
}
int main()
{
int i,j,k;
int min;
i=j=k=0;
i=1;
for(i=1;i<=6;i++) //遍历共有多少个数
{
for(j=i;j>=1;j--)
{
if(i==j)
{
m[j][i]=0;
}
else
{
int temp;
min = 10000000;
for(k=j;k<i;k++)
{
temp= m[j][k]+m[k+1][i]+ P[j-1]*P[k]*P[i];
if(min>temp)
{
min=temp;
s[j][i] = k;
}
}
m[j][i]=min;
}
}
}
printf("%d\n",m[1][6]);
Pri(s,1,6);
return 0;
}