Matrix Chain Multiplication (堆栈)
题目链接: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 (堆栈)相关推荐
- C++matrix chain multiplication矩阵链乘法算法的实现(附完整源码)
C++lmatrix chain multiplication矩阵链乘法算法的实现 C++matrix chain multiplication矩阵链乘法算法的实现的完整源码(定义,实现,main函数 ...
- UVA - 442:Matrix Chain Multiplication
题目链接:https://vjudge.net/problem/UVA-442 题目分析 题目的意思非常简单,就是给定一个矩阵乘法的表达式然后计算就可以了.随便写写 AC代码 #include < ...
- POJ2246 HDU1082 ZOJ1094 UVA442 Matrix Chain Multiplication题解
代码来源:DeathYmz AC的C++语言程序如下: #include<iostream> #include<cstdio> #include<cstring> ...
- stack UVA 442 Matrix Chain Multiplication
题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...
- Uva 442 - Matrix Chain Multiplication(模拟)
题目链接 https://cn.vjudge.net/problem/UVA-442 [题意] 输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法次数.如果乘法无法执行,输出error.假定A是m×n矩 ...
- Matrix Chain Multiplication UVA - 442
题目链接 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法次数.如果乘法无法进行,输出errror.假定A是m*n,B是n*p矩阵,那么AB是m*p矩阵,乘法次数为m*n*p.如果A的列数不等于 ...
- UVa-442-Matrix Chain Multiplication
题目:UVa 442 Matrix Chain Multiplication 题目分析: 关键是解析表达式,可以用栈来解决:遇到字母时入栈,遇到右括号时出栈并且计算,然后结果入栈.因为输入保证合法,括 ...
- 30行代码AC——例题6-3 矩阵链乘(Maxtrix Chain Multiplication, UVa 442)——解题报告
励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-442 储备知识: 矩阵相乘次数: 如图:A矩阵*B矩阵得到C矩阵. C矩阵中元素个数=A矩阵行数*B矩阵列数.得到C矩阵中任意元素都需要运 ...
- ZOJ-1094-Matrix Chain Multiplication
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1094 编程任务:对于给定的矩阵相乘顺序,计算矩阵相乘的乘法次数. 注:题目 ...
最新文章
- 看完 50000 张专辑封面,AI 设计师开始疯狂输出
- AMF3通讯协议实例
- C#对图片的几种简单处理 [ZT]
- 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案
- 23设计模式简介笔记
- 【InfoQ大咖说直播回放】老司机聊程序员的职场道路选择
- 从2017年顶会论文看Attention Model - PaperWeekly 第50期
- hadoop环境搭建遇到的问题:-bash: jps: command not found
- 试图使用removebg工具的在线网站去除图片背景时遇到的错误
- 有关PowerShell脚本你必须知道的十个基本概念
- Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用
- ReportViewer教程(10)-给报表分组合计
- java考前复习之数组
- 专业正则表达式site
- 老司机和驾驶辅助系统相处得如何?MIT研究人员做了个科学研究
- 【Go学习笔记】数组
- 【JavaScript 插件】实现图片倒影效果 - reflex.js
- Java //PP2.11 编写一个程序,提示输入一个代表总钱数的双精度值,然后确定每种纸币和硬币需要的最少数量以达到输入的总钱数(假设10美元纸币为所需要的最大面额)。例如,如果输入的值为47.63
- (PTA)数据结构(作业)3、链表
- [R语言] ggplot2入门笔记4—前50个ggplot2可视化效果
热门文章
- 获取所有汉字与 Unicode 的对照表
- 微信亿级用户异常检测框架的设计与实践
- 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法
- 【报告分享】2021中国智能驾驶核心软件产业研究报告:软件定义,数据驱动.pdf(附下载链接)...
- 在你做推荐系的过程中都遇到过什么坑?
- CSDN 2020博客之星投票进行中:送你喜爱的博主C位出道!
- 一文总结《Effective C++》
- 全球首发!惯性导航导论(剑桥大学)第六部分
- python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法
- Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)