tyvj 1198 矩阵连乘

题目描述

一个

矩阵由 列共 个数排列而成。两个矩阵 可以相乘当且仅当 的列数等于 的行数。一个 的矩阵乘以一个 的矩阵等于一个 的矩阵,运算量为

矩阵乘法满足结合律,

可以表示成 或者是 ,两者的运算量却不同。例如当 时,

。显然第一种顺序节省运算量。

现在给出

个矩阵,并输入 个数,第 个矩阵是

 

输入格式

第一行n(n<=100) 第二行n+1个数

输出格式

最优的运算量

样例

样例输入

3
2 3 4 5

样例输出

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;    
} 
原文地址:https://www.cnblogs.com/LightyaChoo/p/13183026.html