UVa 442 (栈) Matrix Chain Multiplication
2015-01-26 20:49
225 查看
题意:
给出一个矩阵表达式,计算总的乘法次数。
分析:
基本的数学知识:一个m×n的矩阵A和n×s的矩阵B,计算AB的乘法次数为m×n×s。只有A的列数和B的行数相等时,两个矩阵才能进行乘法运算。
表达式的处理:可以用一个栈来存储,遇到字母入栈,遇到右括号将栈顶两个元素出栈,然后将乘积入栈。
代码君
给出一个矩阵表达式,计算总的乘法次数。
分析:
基本的数学知识:一个m×n的矩阵A和n×s的矩阵B,计算AB的乘法次数为m×n×s。只有A的列数和B的行数相等时,两个矩阵才能进行乘法运算。
表达式的处理:可以用一个栈来存储,遇到字母入栈,遇到右括号将栈顶两个元素出栈,然后将乘积入栈。
#include <cstdio> #include <cstring> const int maxn = 30; int n; char s[100]; struct Matrix { int n, m; Matrix(int n=0, int m=0):n(n), m(m) {} int times(const Matrix& rhs) const { if(m == rhs.n) return n * m * rhs.m; return -1; } Matrix operator * (const Matrix& rhs) const { return Matrix(n, rhs.m); } }mat[maxn], stack[maxn]; int ID(char c) { return c - 'A'; } int main() { //freopen("in", "r", stdin); scanf("%d", &n); getchar(); for(int i = 0; i < n; ++i) { int n, m; char name; scanf("%c %d %d", &name, &n, &m); getchar(); mat[ID(name)] = Matrix(n, m); } while(scanf("%s", s) == 1) { int l = strlen(s); int ans = 0, p = 0, ok = 1; for(int i = 0; i < l; ++i) { if(s[i] == '(') continue; else if(s[i] == ')') { Matrix B = stack[--p]; Matrix A = stack[--p]; int t = A.times(B); if(t != -1) { ans += t; stack[p++] = A * B; } else { ok = 0; break; } } else { stack[p++] = mat[ID(s[i])]; } } if(ok) printf("%d\n", ans); else puts("error"); } return 0; }
代码君
相关文章推荐
- Matrix Chain Multiplication (UVa 442)
- Uva 442 Matrix Chain Multiplication
- Uva 442 Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- UVA442 Matrix Chain Multiplication
- Uva 442 Matrix Chain Multiplication (矩阵连乘)
- 算法竞赛入门经典第六章例题6-3 Matrix Chain Multiplication UVA - 442
- UVA442 Matrix Chain Multiplication【stack】【栈】
- UVa 442 Matrix Chain Multiplication
- uva 442 Matrix Chain Multiplication
- UVA 442 - Matrix Chain Multiplication
- UVA442 - Matrix Chain Multiplication
- UVA - 442 Matrix Chain Multiplication(栈)
- POJ2246 HDU1082 ZOJ1094 UVA442 Matrix Chain Multiplication题解
- UVA 442-Matrix Chain Multiplication(栈的运用)
- UVA - 442 Matrix Chain Multiplication 双端队列
- UVA 442 - Matrix Chain Multiplication 数据结构专题
- 【栈 && 矩阵的知识】UVA 442 Matrix Chain Multiplication
- UVa 442 - Matrix Chain Multiplication
- uva-442 Matrix Chain Multiplication