用栈来处理一下就好了。

#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. 推荐几个好的 Maven 常用仓库网址

    注意,以下内容转载自:推荐几个好的 Maven 常用仓库网址 Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个 ...

  2. 用Karma和Jasmine测试Angular应用

    TEST: Before you've written any of the code, you know how you want it to behave. You have a specific ...

  3. python setup.py install 报错ImportError: No module named setuptools

    学习光荣之路python课程时,使用python setup.py install安装其他模块时,第一次安装某模块成功了.安装另一模块却报错ImportError: No module named s ...

  4. linux下获取硬盘、内存、U盘大小及使用大小

    /* * 获取硬盘大小;内存大小;usb大小 */ #ifndef SYSINFOGET_H #define SYSINFOGET_H #include <stdio.h> //磁盘信息 ...

  5. C++知识体系

    基础知识 推荐书目 C++ <C++程序设计>(课程教材即可,简而薄) <STL源码剖析>(对C++进一步深化,也是必备知识) <C++对象模型>(经典中经典,重点 ...

  6. 关于jq的load不用回调获取其中dom元素方法

    jq的load方法如果要操作其中的dom元素,需要使用回调,等其加载完了再进行dom元素的获取,今天看我们项目组长写的一段代码,发现不用回调也能获取到其中的元素. 具体是这样写的: <scrip ...

  7. myeclipse2014安装aptana3.4.0插件

    1.下载aptana3.4.0_eclipse的zip包  http://pan.baidu.com/s/1qXOiZl6 2.打开myeclipse2014,选择help→install from ...

  8. 快速排序(js版本)

    快速排序的时间复杂度为:O(n*log2n),相比较其他O(n2)的排序算法,还是比较有优势的.原文参考在此处,因为本人对原文的一小段代码有点不理解,所以进行了小的修改. 1.基本思想:在数组的第一个 ...

  9. in_array 判断的一些见解

    我个人见解in_array的判断是== 并不是===  证明如下: $arr=(array_merge(range(1, 9),range('a', 'z'),range('A', 'Z')));$m ...

  10. LDAP协议

    很多人虽然会使用dsadd等命令添加用户,但是dsadd的命令说明里面并没有涉及到dc,cn,ou的含义,很多人都不明白,这里是微软的技术支持人 员的回信,希望对大家有帮助. CN, OU, DC 都 ...