zoukankan      html  css  js  c++  java
  • UVa-442-Matrix Chain Multiplication

    题目:UVa 442 Matrix Chain Multiplication

    题目分析:
    关键是解析表达式,可以用栈来解决:遇到字母时入栈,遇到右括号时出栈并且计算,然后结果入栈。因为输入保证合法,括号无需入栈。

    #include <iostream>
    #include <cstdio>
    #include <stack>
    #include <string>
    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;
        cin >> n;
        for(int i=0; i<n; ++i){
            string name ; //a capital letter specifying the name of the matrix.
            cin >> name;
            int k = name[0]-'A';
            cin >> m[k].a >> m[k].b;
        }
        string expr;//expression
    
        while(cin >> expr){
            int len = expr.length();
            bool error = false;
            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){error = true;break;}
                    ans += m1.a * m1.b * m2.b;
                    s.push(Matrix(m1.a,m2.b));
                }
            }
            if(error) printf("error
    ");
            else printf("%d
    ",ans);
    
        }
    
    
    
        return 0;
    }
    技进乎艺,艺进乎道
  • 相关阅读:
    luogu 2627 修剪草坪
    luogu2746 [USACO5.3]校园网Network of Schools
    luogu 1558 色板游戏
    luogu 2827 蚯蚓
    POJ 2559 Largest Rectangle in a Histogram
    luogu 1886 滑动窗口
    luogu 1090 合并果子
    uva 11572
    uva 12626
    uva 10222
  • 原文地址:https://www.cnblogs.com/weekend/p/5506748.html
Copyright © 2011-2022 走看看