DP矩阵链

    技术2022-05-19  23

    看了一天的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;}


    最新回复(0)