POJ 2246 Matrix Chain Multiplication
用栈来处理一下就好了。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std; struct Mar
{
int r,c;
} mar[];
int n;
char s[];
int r,c,top,flag;
Mar Stack[]; int main()
{
scanf("%d",&n);
for(int i=; i<n; i++)
{
scanf("%s%d%d",s,&r,&c);
mar[s[]-'A'].r=r;
mar[s[]-'A'].c=c;
}
while(~scanf("%s",s))
{
int len=strlen(s);
flag=;
top=-;
for(int i=; i<len; i++)
{
if(top==-)
{
top++;
if(s[i]>='A'&&s[i]<='Z')
Stack[top]=mar[s[i]-'A'];
else
{
Mar node;
node.c=-;
node.r=-;
Stack[top]=node;
}
continue;
}
if(s[i]=='(')
{
Mar node;
node.c=-;
node.r=-;
top++;
Stack[top]=node;
}
else if(s[i]==')')
{
top--;
Stack[top]=Stack[top+];
if(top-!=-&&Stack[top-].c!=-&&Stack[top-].r!=-)
{
if(Stack[top-].c!=Stack[top].r)
{
flag=-;
break;
}
else
{
flag=flag+Stack[top-].c*Stack[top-].r*Stack[top].c;
Stack[top-].c=Stack[top].c;
top--;
}
}
}
else
{
Mar node;
node.c=mar[s[i]-'A'].c;
node.r=mar[s[i]-'A'].r;
top++;
Stack[top]=node;
if(Stack[top-].r!=-&&Stack[top-].c!=-)
{
if(Stack[top-].c!=Stack[top].r)
{
flag=-;
break;
}
else
{
flag=flag+Stack[top-].c*Stack[top-].r*Stack[top].c;
Stack[top-].c=Stack[top].c;
top--;
}
}
}
}
if(flag==-) printf("error\n");
else printf("%d\n",flag);
}
return ;
}
POJ 2246 Matrix Chain Multiplication的更多相关文章
- POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)
题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error. 思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/det ...
- Matrix Chain Multiplication[HDU1082]
Matrix Chain Multiplication Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- UVA 442 二十 Matrix Chain Multiplication
Matrix Chain Multiplication Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %l ...
- 例题6-3 Matrix Chain Multiplication ,Uva 442
这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试 得到的经验有以下几点: 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习 有时候代码不对,得到的结果却是对的(之后总结以下常见 ...
- UVa442 Matrix Chain Multiplication
// UVa442 Matrix Chain Multiplication // 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.假定A和m*n的,B是n*p的,那么AB是m*p的,乘法 ...
- UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
意甲冠军 由于矩阵乘法计算链表达的数量,需要的计算 后的电流等于行的矩阵的矩阵的列数 他们乘足够的人才 非法输出error 输入是严格合法的 即使仅仅有两个相乘也会用括号括起来 并且括号中 ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- UVA——442 Matrix Chain Multiplication
442 Matrix Chain MultiplicationSuppose you have to evaluate an expression like A*B*C*D*E where A,B,C ...
- ACM学习历程——UVA442 Matrix Chain Multiplication(栈)
Description Matrix Chain Multiplication Matrix Chain Multiplication Suppose you have to evaluate ...
随机推荐
- 【Python之路】第二篇--初识Python
Python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...
- Hbulider里面template模板自用
template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果. 特性: 模版编 ...
- 5. test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 1. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大 ...
- 在java中json的使用案例
import java.text.ParseException; import org.json.JSONArray; import org.json.JSONObject; public class ...
- RabbitMQ队列
AMQP ,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无 ...
- javascript初始笔记
1.在html中使用点击事件: <button type="button" onclick="myclick()">click me<butt ...
- 比较C++中的4种类型转换方式(转自http://blog.csdn.net/hrbeuwhw/article/details/7884797)
C++的四种cast操作符的区别 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通 ...
- BOS物流管理系统-第一天
BOS物流管理系统-第一天-系统分析.环境搭建.前端框架 BoBo老师 整体项目内容目标: 对项目概述的一些理解 亮点技术的学习 注意学习方式:优先完成当天代码. 其他内容. 最终: 学到新的技术,会 ...
- 数据库 Mysql内容补充一
mysql时间函数 --获取当前日期 select current_date(); --获取当前时间 select current_time(); --获取当前的日期和时间 select now(); ...
- UEditor+七牛,实现图片直连上传
最近做的项目,涉及到使用富文本编辑器,我选择了百度的UEditor.同时,我们的图片放在七牛云存储上.关于这两者间的集成,我写下一些个人的经验,与大家分享. 图片上传方案 目前来说,Web端基于七牛等 ...