矩阵连乘问题

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;

原文地址:https://www.cnblogs.com/hustdc/p/8039255.html