您的位置:首页 > 其它

算法提高 矩阵乘法

2017-04-21 13:25 183 查看
问题描述

  有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, …, a[n-1]*a
,现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。

  两个大小分别为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]
<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: