看了一天的DP算法,感觉好难、、哎。、、只能继续努力了、、下面是矩阵链用c++实现的代码、、、
#include<iostream>
using namespace std;
pair<int*,int*> matrix(int *p,int n)
{
long i,l,j,k,q;
int *m=new int[(n+1)*(n+1)];
int *s=new int[(n+1)*(n+1)];
for(i=0;i<=n;i++)
m[i*(n+1)+i]=0;
for(l=2;l<=n;l++)
for(i=1;i<=n-l+1;i++)
{
j=i+l-1;
m[i*(n+1)+j]=2100000000;
for(k=i;k<=j-1;k++)
{
q=m[i*(n+1)+k]+m[(k+1)*(n+1)+j]+p[i-1]*p[k]*p[j];
if(q<m[i*(n+1)+j])
{
m[i*(n+1)+j]=q;
s[i*(n+1)+j]=k;
}
}
}
return make_pair(m,s);
}
void print(int *s,int i,int j,int n)
{
if(i==j)
cout<<"A"<<i;
else
{
cout<<"(";
print(s,i,s[i*(n+1)+j],n);
print(s,s[i*(n+1)+j]+1,j,n);
cout<<")";
}
}
int main()
{
int p[]={30,35,15,5,10,20,25};
int *s,*m;
pair<int*,int*> r=matrix(p,6);
m=r.first;
s=r.second;
print(s,1,6,6);
cout<<endl<<m[13]<<endl;
delete []s;
delete []m;
return 0;
}