zoukankan      html  css  js  c++  java
  • UVA442 Matrix Chain Multiplication

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <string>
     4 #include <stack>
     5 
     6 using namespace std;
     7 
     8 struct Matrix {
     9     int r,c;
    10     Matrix(int a = 0, int b = 0) : r(a), c(b) {};
    11 }m[26];
    12 
    13 stack<Matrix> s;
    14 
    15 int main()
    16 {
    17     
    18     int n;
    19     cin >> n;
    20     for (int i = 0; i < n; i++) {
    21         string name;
    22         cin >> name;
    23         int k = name[0] - 'A';
    24         cin >> m[k].r >> m[k].c;
    25         
    26     }
    27     
    28     string expr;
    29     while (cin >> expr) {
    30         
    31         int len = expr.size(); // 获取字符串的大小,因为这整个字符串都没有空格
    32         bool error = false;
    33         int ans = 0;
    34         for (int i = 0; i < len; i++) { // 循环整个表达式、思路是遇到右括号就出栈两个Matrix进行计算,算完在压回。
    35             // 其实你可以发现带括号的表达式十分符合栈,而不仅仅是该题目,首先左括号越深
    36             // 其计算的有先级别越高,而右括号又和左括号配对,如果我们从左到右读取一个表达式
    37             // 每次一遇到右括号,其前面到左括号的部分肯定就是这个表达式最优先的部分。
    38             if (isalpha(expr[i])) { s.push(m[expr[i] - 'A']); }
    39             else if (')' == expr[i]) {
    40                 Matrix m2 = s.top(); s.pop();
    41                 Matrix m1 = s.top(); s.pop();
    42                 if (m1.c != m2.r) { error = truebreak; }
    43                 ans += m1.r * m1.c * m2.c;
    44                 s.push(Matrix(m1.r, m2.c));
    45             }
    46             
    47         }
    48         
    49         if (error) printf("error "); else printf("%d ", ans);
    50         
    51     }
    52     
    53     return 0;
    54 }
    55 

    2015/4/10下午6:32:37
    By sixleaves
  • 相关阅读:
    深入Python(一)
    深入Python(二)
    初识Python(五)
    初识Python(一)
    深入Python(三)
    一、MongoDB的下载、安装与部署
    浏览器上的javascript
    javascript中的事件
    扩展方法
    团队项目开题报告
  • 原文地址:https://www.cnblogs.com/objectc/p/4553401.html
Copyright © 2011-2022 走看看