数据结构-动态规划-矩阵乘法次数最少
#include "stdafx.h"
#include<iostream>
#include<algorithm>
using namespace std;
void MatrixChain(int p[], int n,int m[][6],int s[][6]){
int i,j,r,k,t;
for(int i=0;i<n;i++){
m[i][i]=0;
}
for(int r=2;r<=n;r++){
for(int i=0;i<n-r+1;i++){
j=i+r-1;
m[i][j]=m[i+1][j]+p[i]*p[i+1]*p[j+1];
s[i][j]=i;
for(int k=i+1;k<j;k++){
t=m[i][k]+m[k+1][j]+p[k+1]*p[i]*p[j+1];
if(t<m[i][j]){
m[i][j]=t;
s[i][j]=k;
}
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int p[7]={30,35,15,5,10,20,25};
int m[6][6]={0};
int s[6][6]={0};
MatrixChain(p,6,m,s);
//cout<<"cc"<<endl;
for(int i=0;i<6;i++){
//for(int m=0;m<i;m++)
// cout<<" ";
for(int j=i;j<6;j++)
{
cout<<m[i][j]<<" ";
}
cout<<endl;
}
for(int i=0;i<6;i++){
//for(int m=0;m<i;m++)
// cout<<" ";
for(int j=i;j<6;j++)
{
cout<<s[i][j]<<ends;
}
cout<<endl;
}
return 0;
}