UVa 442 ------ Matrix Chain Multiplication
来源:互联网 发布:燕雀焉知鸿鹄之志图片 编辑:程序博客网 时间:2024/04/30 13:55
题目: UVa 442
题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的步数。若乘法无法进行,输出error。
如A m*n, B n*p, 那么A*B的步数为m*n*p;若A的列数不等于B的行数,乘法无法进行
思路:若遇到字母,则将相应矩阵入栈;
若遇到右括号,则取栈顶的两个元素相乘(注意两个矩阵的顺序),累加步数,并将相乘的结果入栈
代码:
/*UVa 442 矩阵链乘*/#include <cstdio>#include <stack>#include <iostream>#include <string>using namespace std;struct Mat{int r, c;Mat(int a = 0, int b = 0):r(a), c(b){}}m[26];stack<Mat> s;int main(){int n;scanf("%d", &n);for (int i = 0; i < n; ++i){//n个矩阵的存储string name;cin >> name;int k = name[0] - 'A';cin >> m[k].r >> m[k].c;}string tmp;while (cin >> tmp){int len = tmp.length();bool error = false;int ans = 0;for (int i = 0; i < len; ++i){if (isalpha(tmp[i])) //字母,则入栈s.push(m[tmp[i] - 'A']);else if (tmp[i] == ')'){ //遇到又括号,k2,k1依次出栈,累加上步数,并将矩阵相乘结果入栈Mat k2 = s.top(); s.pop();Mat k1 = s.top(); s.pop();//注意后取的为k1, 运算k1*k2if (k1.c != k2.r){error = true;break;}else{ans += (k1.r * k1.c * k2.c);s.push(Mat(k1.r, k2.c));}}}//for(i)if (error){printf("error\n");}else{printf("%d\n", ans);}}//while(tmp)return 0;}
0 0
- 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
- 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
- uva 442Matrix 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
- 【五】注入框架RoboGuice使用:(Your First POJO Injection)
- 数据压缩与信息熵
- 给我们自己一个空间—兄弟连IT教育
- IM类应用架构所需了解
- 使用java实现高中数学中自由组合
- UVa 442 ------ Matrix Chain Multiplication
- WIN8下在VBA中出现用户定义类型未定义错误
- CSS盒子模型
- 单片机通过串口传数据到c#程序出现的问题
- C#网页数据采集(二)WebBrowser
- JSP:自定义标签的实现步骤及小例
- 【Android】让引导页每次在更新之后都出现的实现方法
- android:Log日志保存到本地
- c oc swift的冒泡排序