UVa442 Matrix Chain Multiplication(栈)

#include<cstdio>
#include<cstring> #include<stack> #include<algorithm> #include<iostream> using namespace std; struct matrix { int a,b; matrix(int a=0,int b=0):a(a),b(b) {}//结构体构造函数赋值 }m[26]; stack<matrix>s; int main() { int n; char A; scanf("%d",&n); for(int i=1;i<=n;i++) { cin >> A; int k=A-'A'; cin >> m[k].a >> m[k].b; } string expr; while(cin >> expr) { int len = expr.length(); int flag = 0; int ans = 0; for(int i = 0; i < len; i++) { if(isalpha(expr[i])) s.push(m[expr[i]-'A']); else if(expr[i] == ')') { matrix m2 = s.top(); s.pop(); matrix m1 = s.top(); s.pop(); if(m1.b != m2.a) { flag = 1; break; } ans += m1.a*m1.b*m2.b; s.push(matrix(m1.a,m2.b)); } } if(flag) printf("error "); else printf("%d ",ans); } return 0; }
原文地址:https://www.cnblogs.com/LLLAIH/p/10375619.html