矩阵由 行 列共 个数排列而成。两个矩阵 和 可以相乘当且仅当 的列数等于 的行数。一个 的矩阵乘以一个 的矩阵等于一个 的矩阵,运算量为
。
矩阵乘法满足结合律,
可以表示成 或者是 ,两者的运算量却不同。例如当 时, 而
。显然第一种顺序节省运算量。
现在给出
个矩阵,并输入 个数,第 个矩阵是
样例输入
样例输出
64
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N],n;
long long f[N][N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n+1;i++){
scanf("%d",&a[i]);
}
memset(f,0x7f7f,sizeof(f));
for(int i=1;i<=n+1;i++){
f[i][i]=0;
}
for(int len=1;len<=n;len++){
for(int i=2;i<=n;i++){
int j=min(i+len-1,n);
for(int k=i;k<j;k++){
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+a[i-1]*a[k]*a[j]);
}
}
}
printf("%lld
",f[1][n]);
return 0;
}