用栈来处理一下就好了。

#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的更多相关文章

  1. POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)

    题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error. 思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/det ...

  2. Matrix Chain Multiplication[HDU1082]

    Matrix Chain Multiplication Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. UVA 442 二十 Matrix Chain Multiplication

    Matrix Chain Multiplication Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  4. 例题6-3 Matrix Chain Multiplication ,Uva 442

    这个题思路没有任何问题,但还是做了近三个小时,其中2个多小时调试 得到的经验有以下几点: 一定学会调试,掌握输出中间量的技巧,加强gdb调试的学习 有时候代码不对,得到的结果却是对的(之后总结以下常见 ...

  5. UVa442 Matrix Chain Multiplication

    // UVa442 Matrix Chain Multiplication // 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.假定A和m*n的,B是n*p的,那么AB是m*p的,乘法 ...

  6. UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)

    意甲冠军  由于矩阵乘法计算链表达的数量,需要的计算  后的电流等于行的矩阵的矩阵的列数  他们乘足够的人才  非法输出error 输入是严格合法的  即使仅仅有两个相乘也会用括号括起来  并且括号中 ...

  7. Matrix Chain Multiplication(表达式求值用栈操作)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...

  8. 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 ...

  9. ACM学习历程——UVA442 Matrix Chain Multiplication(栈)

    Description   Matrix Chain Multiplication  Matrix Chain Multiplication  Suppose you have to evaluate ...

随机推荐

  1. GCD系列 之(二): 多核心的性能

    全局队列的并发执行 for(id obj in array) [self doSomethingIntensiveWith:obj]; 假设,每个元素要做的事情-doSomethingIntensiv ...

  2. SQL Server函数格式

    函数格式CREATE FUNCTION -- ============================================= -- Author: Clive Chinery -- Cre ...

  3. react学习笔记-02

    1.组件嵌套 React允许将代码封装成一个component,然后像html标签一样,插入网页中中. var HelloMessage = React.createClass({ render: f ...

  4. JavaScript 属性类型(数据属性 访问器属性)

    ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把E ...

  5. Java代码之输出参数和(强制类型转换)

    说明(因为Java中java Application的参数都是默认的字符型的数据,所以需要强制类型转换这一步骤) 设计思想: 向系统里输入若干个参数,计算出参数个数,利用for语句计算出参数的和.(程 ...

  6. VMware安装Centos6.8设置ip无法远程连接问题

    今天使用VMware安装Centos6.8minimal版本再设置ip地址的时候遇到了一些麻烦,就是无法ping通Centos操作系统的配置的ip从而无法用Xshell远程连接上. 如何配置请看下面的 ...

  7. OpenVPN GUI: "No TAP-WIN32 adapters on this system"

    找到C:\Program Files\TAP-Windows\bin 管理员身份运行: deltapall.bat addtap.bat

  8. 通过jvisualvm查看JVM的状态

    安装了JDK之后,可以通过jvisualvm 命令进行性能分析

  9. PHP截取含中文的混合字符串长度的函数

    截取含中文的混合字符串长度 /** * 截取中文混合字符串指定长度 * * @param string $string * @param integer $length * @param string ...

  10. 写了一下午的dijkstra。突然发现我写的根本不是dijkstra。。。。是没优化过的BFS.......

    写了一下午的dijkstra.突然发现我写的根本不是dijkstra....是没优化过的BFS.......