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(栈模拟水题+专治自闭)