1 问题描述
2 问题解决
2.1 子问题提取和描述
m[i, j],下标为i到j的矩阵相乘,i<=j,i、j属于{1,2,...,n}。连续相邻的几个矩阵相乘,它们同样也具有最小的计算次数。
2.2 递推关系
3 编码
#include <iostream>
#include <climits>
#include <cstring>
int p[5] = {2, 3, 4, 5, 8};
int min(int m[5][5], int i, int j)
{
int sum = INT_MAX;
if (i == j)
{
return 0;
}
for (int k = i; k <j; k++)
{
int tmp_sum = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if (tmp_sum < sum)
{
sum = tmp_sum;
}
}
return sum;
}
int main(int argc, char* argv[])
{
int m[5][5];
memset(m, 0, sizeof(m));
for (int j = 0; j < 4; j++)
{
for (int i = 1; i < 5; i++)
{
if (i + j < 5)
{
m[i][i + j] = min(m, i, i+j);
}
}
}
std::cout<<m[1][4]<<std::endl;
}