首页 > 其他 > 详细

UVA442 矩阵链乘 Matrix Chain Multiplication

时间:2020-07-19 21:02:33      阅读:85      评论:0      收藏:0      [点我收藏+]

这还是一个栈的问题。

通过给出的表达式,首先声明不会出现(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 

UVA442 矩阵链乘 Matrix Chain Multiplication

原文:https://www.cnblogs.com/rstz/p/13340682.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!