算法提高 矩阵乘法

来源:互联网 发布:数据迁移重要程度 编辑:程序博客网 时间:2024/06/05 02:13

问题描述
  有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, …, a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。
  两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。
  
输入格式
  输入的第一行包含一个整数n,表示矩阵的个数。

输出格式
  输出一个整数,表示最少的运算次数。
  
样例输入
3

样例输出
150

数据规模和约定
  1<=n<=1000, 1<=ai<=10000。
  


一定要注意用longlong 保存数据,不然会错很多组数据
AC代码:

#include"iostream"#include"string.h"using namespace std;long long ai[2010];long long dp[2010][2010];int main(){    memset(dp,0,sizeof(dp));    int n;    cin>>n;    for(int i=1;i<=n+1;i++)    {        cin>>ai[i];    }    for(int i=n-1;i>=1;i--)    {        for(int j=i+1;j<=n;j++)        {            long long  mmin=1e18;            for(int k=i;k<j;k++)            {                long long sum=dp[i][k]+dp[k+1][j]+ai[i]*ai[k+1]*ai[j+1];                if(sum<mmin)                mmin=sum;            }             dp[i][j]=mmin;        }    }    cout<<dp[1][n]<<endl;    return 0;}
0 0