问题描述
题目链接:矩阵乘法.
问题描述:
有n个矩阵,大小分别为a0a1, a1a2, a2a3, …, a[n-1]a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。
两个大小分别为pq和qr的矩阵相乘时的运算次数计为pqr。
输入格式:
输入的第一行包含一个整数n,表示矩阵的个数。
第二行包含n+1个数,表示给定的矩阵。
输出格式:
输出一个整数,表示最少的运算次数。
样例输入:
3
1 10 5 20
样例输出:
150
数据规模和约定:
1<=n<=1000, 1<=ai<=10000。
解题思路
借鉴:【算法导论】动态规划之“矩阵链乘法”问题.
1.用dp[i][j]代表矩阵i 连续相乘到 j 的最小运算数
2.状态转移方程: dp[i][j] = min(dp[i][j],dp[i][k] + dp[k + 1][j] + a[i - 1]*a[k]a[j]
其中 k 代表将{i···j}原矩阵链分割成 {i··k}{k+1···j}两小矩阵相乘
具体代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[1001],dp[