zoukankan      html  css  js  c++  java
  • UVA442 矩阵链乘 Matrix Chain Multiplication

    这还是一个栈的问题。

    通过给出的表达式,首先声明不会出现(A*B*C)像这样的情况,线性代数不允许这样。

    所以通过将字母对应的矩阵入栈。当遇到右括号时有唯一匹配,所以可以取出栈顶两个元素运算。

      1 #include <iostream>
      2 #include <stack>
      3 #include <string>
      4 #include <algorithm>
      5 using namespace std;
      6 
      7 struct Matrix {
      8 	int a, b;
      9 	Matrix(int a = 0, int b = 0):a(a),b(b){}
     10 
     11 }m[26];
     12 
     13 stack<Matrix> s;
     14 
     15 int main () {
     16 	int n;
     17 	cin >> n;
     18 	for (int i = 0; i < n; ++ i) {
     19 		string name;
     20 		cin >> name;
     21 		int k = name[0] - 'A';
     22 		cin >> m[k].a >> m[k].b;
     23 	}
     24 
     25 	string expr;
     26 	while(cin >> expr) {
     27 		int len = expr.length();
     28 		bool error = false;
     29 		int ans = 0;
     30 		for (int i = 0; i < len; ++ i)
     31 		{
     32 			if (isalpha(expr[i])) s.push(m[expr[i] - 'A']);//是字母入栈 
     33 			else if(expr[i] == ')') {//出栈并判断运算入栈。 
     34 				Matrix m2 = s.top(); s.pop();
     35 				Matrix m1 = s.top(); s.pop();
     36 				if (m1.b != m2.a ) {
     37 					error = true;
     38 					break;
     39 				}
     40 				ans += m1.a * m1.b * m2.b;
     41 				s.push(Matrix(m1.a, m2.b));
     42 			}
     43 		}
     44 		if(error) cout << "error" << endl;
     45 		else cout << ans << endl;
     46 	}
     47 	return 0;
     48 }
     49 
     50 
     51 
     52 
     53 
     54 
    追求吾之所爱
  • 相关阅读:
    日期正则表达式yyyyMMdd
    Markdown语法
    su: Authentication failure问题
    Git初始配置
    layui的layer.open()方法查看缩略图 原图缩放
    入驻博客园三年
    php学习笔记之动态生成一组单选button
    opencv直方图拉伸
    c++ 中const的使用
    LeetCode131:Palindrome Partitioning
  • 原文地址:https://www.cnblogs.com/rstz/p/14391014.html
Copyright © 2011-2022 走看看