矩阵连乘问题
题目描述
已知有 n个矩阵,第 i个矩阵的行数为 A[i], 列数为A[i+1] 。
试求把 n个矩阵乘起来所需要的执行乘法的次数的最小值。
输入描述
第一行是一个正整数n,表示矩阵的个数。 第二行有n+1个整数,第i个整数表示A[i].
输出描述
输出第一行有一个整数,将n个矩阵乘起来所要执行的乘法次数的最小值。
样例输入
4
1 2 3 4 5
样例输出
38
#include<cstdio>
#include<algorithm>
using namespace std;
int matrix[105];
int ans[104][104];
int main()
{
// freopen("data1.txt", "r", stdin);
int n;
scanf("%d", &n);
for (int i = 0; i <= n; ++i)
{
scanf("%d", &matrix[i]);
}
for (int i = 1; i <= n - 1; ++i)//ÍùºóÑÓ³¤µÄ¸öÊý
{
for (int j = 0; j + i <= n - 1; ++j)
{
int mn = 1 << 30;
for (int k = 0; k < i; ++k)
{
mn = min(mn, ans[j][j + k] + ans[j + k + 1][j + i] + \
matrix[j] * matrix[j + k + 1] * matrix[j + i + 1]);
}
ans[j][j + i] = mn;
}
}
printf("%d\n", ans[0][n - 1]);
return 0;
}