1、
#include
#include
#include
#include "windows.h"
#define M 100
#define N 50
int cou=0;
int v[M];
struct Arry //存放一次相乘后的数组
{
int**a;
};
struct Arryt
{
int row;
int cowl;
int number;
int**p;
};
int Common[N-1][N-1];
void MartrixChain(int
2、p,int n,int **m,int**s)
{
for(int i=1;i<=n;i++) m[i][i]=0;
for(int r=2;r<=n;r++)
for(int i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k3、f (t4、号方式
Traceback(s[i][j]+1,j,s);//递归打印A[s[i][j]+1:j]的加括号方式
// cout<<"A"<
5、1;
v[4*cou+3]=j;
cou=cou+1;
// return k;
}
//----------------------------------------
void selectMultiply(Arry *A,int v[],int c,int*p,Arryt *temp)
{
int k;
int s;
int t;
int m;
int j,n,l,x,y;
//k=c;
// Arryt *temp=new Arryt[c];
for(int i=0;i6、v[i*4+1])
{
if(v[i*4+2]==v[i*4+3])
{
k=v[i*4]; //kk下标为11、22,33类型
s=v[i*4+2]; //ss下标为11、22类型
temp[i].p=new int*[p[k-1]];
for(j=0;j
7、s;
for(j=0;j
8、 //}st下标23、35类型
t=v[i*4+3]; //}
for(j=0;j
9、emp[i].cowl=temp[x].cowl;
temp[i].number=10*k+t;
for(j=0;j
10、v[i*4+2]==v[i*4+3])
{
k=v[i*4]; //}
//}ks下标23、35类型
s=v[i*4+1];//}
t=v[i*4+2];//tt下标为11、22类型
for(j=0;j
11、p[j]=new int[p[t]];
temp[i].row=temp[x].row;
temp[i].cowl=p[t];
temp[i].number=10*k+t;
for(j=0;j12、 }
}
else
{
k=v[i*4]; //}ks下标23、35类型
s=v[i*4+1];//}
t=v[i*4+2];//tm下标23、35类型
m=v[i*4+3];
for(j=0;j
13、x].row;j++)
temp[i].p[j]=new int[temp[y].cowl];
temp[i].row=temp[x].row;
temp[i].cowl=temp[y].cowl;
temp[i].number=10*k+m;
for(j=0;j14、temp[x].p[j][l]*temp[y].p[l][n];
temp[i].p[j][n]=sum;
}
}
}
}
}
void outputselect(int c,int n,Arryt *temp)
{
int i,j;
int s=10+n;
for(i=0;i15、
int n,i,j;//连乘的数组的个数
cout<<"输入连乘的数组的个数:";
cin>>n;
int *p;//维数
int **m; //保存最优值数组
int**s;
//分配空间
p=new int[n+1]; //分配矩阵维数数组空间
cout<<"请输入第一个矩阵的行列数以及其他矩阵的列数:"<>p[i];
m=new int*[n+1]; //分配空间
for(i=0;i<=n ; i++)
m[i]=new i
16、nt[n+1];
s=new int*[n+1]; //分配空间
for (i=0;i<=n ; i++)
s[i]=new int[n+1];
s=new int*[10]; //分配空间
for (i=0;i<=10 ; i++)
s[i]=new int[10];
for(i=0;i17、i++)
{
A[i].a=new int*[p[i]];
for(j=0;j