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 

  • 相关阅读:
    Centos 7 运行出错:cannot find a valid basecrl for repo:base/7/x86_64
    nc 使用
    linux uniq去重,awk输出(可用于爆破字典优化)
    关于fixedsys字体 FSEX300.ttf FSEX300-L.ttf FSEX301-L2.ttf
    MyAtoi
    viplugin eclipse
    资源获取即初始化RAII
    阈值分割技术
    图像类型转换
    形态学
  • 原文地址:https://www.cnblogs.com/rstz/p/13340682.html
Copyright © 2011-2022 走看看