题目链接:https://vjudge.net/problem/UVA-442

题目大意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数。如果乘法无法进行,输出error。 假定A是m*n的矩阵,B是n*p的矩阵,乘法次数为m*n*p。如果A的列数不等于B的行数,则乘法

无法进行。

  例如A是50*10的,B是10*20的,C是20*5的,则(A(BC))的乘法次数为10*20*5(BC的乘法次数)+50*10*5((A(BC)的乘法次数)=3500

分析:本题的关键是解析表达式,本题的表达式比较简单,可以用一个栈来完成,遇到字母时入栈,遇到右括号时出栈并计算,然后结果入栈。 因为保证输入合法,括号无需入栈

#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=26+5;
struct Matrix
{int a,b;//Matrix (int a=0,int b=0):a(a),b(b){}Matrix (int c=0,int d=0){a=c;b=d;}
}m[maxn];
stack<Matrix> s;
int main()
{int n;cin>>n;for(int i=0;i<n;i++){string name;cin>>name;int k=name[0]-'A';//存下标cin>>m[k].a>>m[k].b;}string expr;while(cin>>expr){int len=expr.length();bool error=false;int ans=0;for(int i=0;i<len;i++){if(isalpha(expr[i])) s.push(m[expr[i]-'A']);//是否是字母  也就是矩阵  是的话入栈else if(expr[i]==')'){Matrix m2=s.top(); s.pop();//取两个字符Matrix m1=s.top(); s.pop();if(m1.b!=m2.a){error=true;break;}ans+=m1.a*m1.b*m2.b;s.push(Matrix(m1.a,m2.b));}}if(error) cout<<"error"<<endl;else cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/caijiaming/p/10340888.html

Matrix Chain Multiplication (堆栈)相关推荐

  1. C++matrix chain multiplication矩阵链乘法算法的实现(附完整源码)

    C++lmatrix chain multiplication矩阵链乘法算法的实现 C++matrix chain multiplication矩阵链乘法算法的实现的完整源码(定义,实现,main函数 ...

  2. UVA - 442:Matrix Chain Multiplication

    题目链接:https://vjudge.net/problem/UVA-442 题目分析 题目的意思非常简单,就是给定一个矩阵乘法的表达式然后计算就可以了.随便写写 AC代码 #include < ...

  3. POJ2246 HDU1082 ZOJ1094 UVA442 Matrix Chain Multiplication题解

    代码来源:DeathYmz AC的C++语言程序如下: #include<iostream> #include<cstdio> #include<cstring> ...

  4. stack UVA 442 Matrix Chain Multiplication

    题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...

  5. Uva 442 - Matrix Chain Multiplication(模拟)

    题目链接 https://cn.vjudge.net/problem/UVA-442 [题意] 输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法次数.如果乘法无法执行,输出error.假定A是m×n矩 ...

  6. Matrix Chain Multiplication UVA - 442

    题目链接 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法次数.如果乘法无法进行,输出errror.假定A是m*n,B是n*p矩阵,那么AB是m*p矩阵,乘法次数为m*n*p.如果A的列数不等于 ...

  7. UVa-442-Matrix Chain Multiplication

    题目:UVa 442 Matrix Chain Multiplication 题目分析: 关键是解析表达式,可以用栈来解决:遇到字母时入栈,遇到右括号时出栈并且计算,然后结果入栈.因为输入保证合法,括 ...

  8. 30行代码AC——例题6-3 矩阵链乘(Maxtrix Chain Multiplication, UVa 442)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-442 储备知识: 矩阵相乘次数: 如图:A矩阵*B矩阵得到C矩阵. C矩阵中元素个数=A矩阵行数*B矩阵列数.得到C矩阵中任意元素都需要运 ...

  9. ZOJ-1094-Matrix Chain Multiplication

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1094 编程任务:对于给定的矩阵相乘顺序,计算矩阵相乘的乘法次数. 注:题目 ...

最新文章

  1. 看完 50000 张专辑封面,AI 设计师开始疯狂输出
  2. AMF3通讯协议实例
  3. C#对图片的几种简单处理 [ZT]
  4. 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案
  5. 23设计模式简介笔记
  6. 【InfoQ大咖说直播回放】老司机聊程序员的职场道路选择
  7. 从2017年顶会论文看Attention Model - PaperWeekly 第50期
  8. hadoop环境搭建遇到的问题:-bash: jps: command not found
  9. 试图使用removebg工具的在线网站去除图片背景时遇到的错误
  10. 有关PowerShell脚本你必须知道的十个基本概念
  11. Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用
  12. ReportViewer教程(10)-给报表分组合计
  13. java考前复习之数组
  14. 专业正则表达式site
  15. 老司机和驾驶辅助系统相处得如何?MIT研究人员做了个科学研究
  16. 【Go学习笔记】数组
  17. 【JavaScript 插件】实现图片倒影效果 - reflex.js
  18. Java //PP2.11 编写一个程序,提示输入一个代表总钱数的双精度值,然后确定每种纸币和硬币需要的最少数量以达到输入的总钱数(假设10美元纸币为所需要的最大面额)。例如,如果输入的值为47.63
  19. (PTA)数据结构(作业)3、链表
  20. [R语言] ggplot2入门笔记4—前50个ggplot2可视化效果

热门文章

  1. 获取所有汉字与 Unicode 的对照表
  2. 微信亿级用户异常检测框架的设计与实践
  3. 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法
  4. 【报告分享】2021中国智能驾驶核心软件产业研究报告:软件定义,数据驱动.pdf(附下载链接)...
  5. 在你做推荐系的过程中都遇到过什么坑?
  6. CSDN 2020博客之星投票进行中:送你喜爱的博主C位出道!
  7. 一文总结《Effective C++》
  8. 全球首发!惯性导航导论(剑桥大学)第六部分
  9. python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
  10. Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)