动态规划——矩阵连乘

来源:互联网 发布:网络课程评价指标体系 编辑:程序博客网 时间:2024/05/16 18:23
#include <iostream>using namespace std;void MatrixMul(int *p,int n,int**m ,int **s)///p记录矩阵维数,m最少乘法次数,s分法{    for(int i=0;i<n;i++)        m[i][i]=0;    for(int r=1;r<n;r++)        for(int i=0;i<n-r;i++)        {          int j=i+r;          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++)          {              int t=m[i][k]+m[k+1][j]+p[i]*p[k]*p[j+1];              if(t<m[i][j])              {                  m[i][j]=t;                  s[i][j]=k;              }          }        }}int main(){    int *p,**m,**s,n;    cin>>n;    m=new int*[n];    s=new int*[n];    for(int i=0;i<n;i++)    {        m[i]=new int[n];        s[i]=new int[n];    }    p=new int[n+1];    for(int i=0;i<n+1;i++)        cin>>p[i];    MatrixMul(p,n,m ,s);    cout<<m[0][n-1]<<endl;    return 0;}

0 0
原创粉丝点击