//这是按照算法导论给出解法写出的算法
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
ifstream fin("C:\\data17.in");
char ID[100];
int length[100],width[100];
int n;
int multinum[100][100];
int s[100][100];
#define MAXNUM 65535
void Init()
{
char name;
int len,wid;
n=0;
while(fin>>name>>len>>wid)
{
ID[n]=name;
length[n]=len;
width[n++]=wid;
}
memset(multinum,0,sizeof(multinum));
memset(s,0,sizeof(s));
}
void MATRIX_CHAIN_ORDER()
{
for(int i=0;i<n;++i)
multinum[i][i]=0;
for(int l=2;l<=n;++l)
{
for(int i=0;i<n-l+1;++i)
{
int j=i+l-1;
multinum[i][j]=MAXNUM;
int p;
for(int k=i;k<j;++k)
{
p=multinum[i][k]+multinum[k+1][j]+length[i]*width[k]*width[j];
if(p<multinum[i][j])
{
multinum[i][j]=p;
s[i][j]=k;
}
}
}
}
}
void PRINT_OPTIMAL_PARENS(int i,int j)
{
if(i==j)
cout<<ID[i];
else
{
cout<<"(";
PRINT_OPTIMAL_PARENS(i,s[i][j]);
PRINT_OPTIMAL_PARENS(s[i][j]+1,j);
cout<<")";
}
}
int main()
{
Init();
MATRIX_CHAIN_ORDER();
PRINT_OPTIMAL_PARENS(0,n-1);
system("pause");
return 0;
}
MATRIX_CHAIN
最新推荐文章于 2022-04-04 10:02:18 发布