442 - Matrix Chain Multiplication

Posted guopinghai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了442 - Matrix Chain Multiplication相关的知识,希望对你有一定的参考价值。

欢迎folk或者star我的repo:https://github.com/guopeiming/algorithm-training,每天更新一道oj入门紫皮书上的题目或者oj、LeetCode,持续更新中

主要就是模拟矩阵的计算过程,注意每一次栈都要清空,否则,上一次残留的东西会影响后一次的计算。
整个的计算过程就类似前、后、中缀表达式的计算过程,很类似计算器,比较简单的水题
#include <stdio.h>
#include <stack>
#include <string.h>
using namespace std;

void mul();

int mat[60], n;
stack<int> s;
char str[200];

int main()
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
        getchar();
        char name;
        scanf("%c", &name);
        scanf("%d %d", mat+2*(name-‘A‘), mat+2*(name-‘A‘)+1);
    
    while(~scanf("%s", str))
        mul();
        while(!s.empty())
            s.pop();
        
    
    return 0;
void mul()
    int res = 0;
    for(int i = 0; i < strlen(str); ++i)
        if(str[i] == ‘(‘)
            continue;
        else if(str[i] == ‘)‘)
            int matSize[4];
            for(int j = 3; j >= 0; --j)
                matSize[j] = s.top();
                s.pop();
            
            if(matSize[1] != matSize[2])
                printf("error\n");
                return;
            else
                res += matSize[0]*matSize[1]*matSize[3];
                s.push(matSize[0]);
                s.push(matSize[3]);
            
        else
            s.push(mat[(str[i]-‘A‘)*2]);
            s.push(mat[(str[i]-‘A‘)*2+1]);
        
    
    printf("%d\n", res);
// Sample Input
// 9
// A 50 10
// B 10 20
// C 20 5
// D 30 35
// E 35 15
// F 15 5
// G 5 10
// H 10 20
// I 20 25
// A
// B
// C
// (AA)
// (AB)
// (AC)
// (A(BC))
// ((AB)C)
// (((((DE)F)G)H)I)
// (D(E(F(G(HI)))))
// ((D(EF))((GH)I))

// Sample Output
// 0
// 0
// 0
// error
// 10000
// error
// 3500
// 15000
// 40500
// 47500
// 15125

//数据结构栈的使用
//牢记每次计算之前栈一定要先清空

以上是关于442 - Matrix Chain Multiplication的主要内容,如果未能解决你的问题,请参考以下文章

UVa442 Matrix Chain Multiplication (栈)

UVA - 442 Matrix Chain Multiplication(栈模拟水题+专治自闭)

Matrix Chain Multiplication (堆栈)

Matrix Chain Multiplication

matrix_chain_order

transition_matrix Markov chain