zoj - 1094 - Matrix Chain Multiplication
来源:互联网 发布:coc野蛮人升级数据 编辑:程序博客网 时间:2024/05/28 22:13
题意:输入不超过26个矩阵的行数和列数,接着来一些表达式询问,求各条表达式需要多少次基本运算。
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=94
——>>用STL开2个栈,一个用来存“(”,一个用来存储矩阵,扫描表达式,当碰到矩阵时,放入矩阵栈;当碰到“(”时,放入符号栈;当碰到“)”的时候,从矩阵栈中取(退)2个矩阵相乘并记录乘法次数和,并将相乘后的矩阵放入矩阵栈,从符号栈中删除1个“(”,最后输出结果即可。
#include <iostream>#include <stack>using namespace std;struct Matrix //矩阵类型,包括行数和列数{ int row; //行数 int col; //列数};int main(){ int n, i; //n为输入的矩阵个数 Matrix mat[30]; //用来存储各个单矩阵(最多只有26个,所以开30的空间有了!!!) char c; cin>>n; for(i = 0; i < n; i++) { cin>>c; int index = (int)(c-'A'); //让矩阵数组的下标0,1,2...就标志着A,B,C... cin>>mat[index].row>>mat[index].col; //存入对应的行数和列数 } string s; //以字符串的形式输入每行测试数据 while(cin>>s) { long long sum = 0; //基本乘法数之和,初始为0 int len = s.length(); stack<char> st_sign; //该栈用来存储"(" stack<Matrix> st_node; //该栈用来存储"矩阵" int ok = 1; //ok用来标志是否出现error的现象 for(i = 0; i < len; i++) //扫描各个字符 if(s[i] == ')') //当出现")"时,必有"("与其对应 { int right_value = st_node.top().col; //从栈中取出矩阵数据,右矩阵的列数 int mid_value_right = st_node.top().row; //右矩阵的行数 st_node.pop(); int left_value = st_node.top().row; //从栈中取出矩阵数据,左矩阵的行数 int mid_value_left = st_node.top().col; //左矩阵的列数 if(mid_value_left != mid_value_right) //当 左矩阵的列数 != 右矩阵的行数 时 { ok = 0; break; } st_node.pop(); st_sign.pop(); sum += left_value * mid_value_left * right_value; //累加基本乘法次数 Matrix newmat; newmat.row = left_value; newmat.col = right_value; st_node.push(newmat); //新建一个矩阵,行数为左矩阵的行数,列数为右矩阵的列数,进栈 } else if(s[i] == '(') //碰到"("直接放入符号栈即可 st_sign.push('('); else //当扫到字母即矩阵的时候 { int new_index = (int)(s[i]-'A'); //转换下标 st_node.push(mat[new_index]); //将该矩阵放入矩阵栈 } if(ok) cout<<sum<<endl; else cout<<"error"<<endl; } return 0;}
- zoj - 1094 - Matrix Chain Multiplication
- zoj-1094-Matrix Chain Multiplication
- zoj 1094 Matrix Chain Multiplication
- ZOJ 1094 Matrix Chain Multiplication
- ZOJ 1094 Matrix Chain Multiplication
- ZOJ-1094-Matrix Chain Multiplication
- ZOJ-1094,POJ-2246 Matrix Chain Multiplication
- zoj 1094 poj 2246 Matrix Chain Multiplication(堆栈)
- UVa 442 - Matrix Chain Multiplication(zoj 1094)
- POJ 2246/ ZOJ 1094 : Matrix Chain Multiplication - 矩阵相乘,模拟
- ZOJ 1094_Matrix Chain Multiplication
- UVa 442/HDU 1082/ZOJ 1094 Matrix Chain Multiplication(模拟&栈)
- zoj-1094Matrix Chain Multiplication(栈来实现矩阵相乘)
- Matrix Chain Multiplication
- zoj1094 Matrix Chain Multiplication
- Matrix chain multiplication problem
- Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- 基于 OAuth 安全协议的 Java 应用编程
- C语言实现的LCD数学
- 欧拉计划第四题:关于求回文数。第五题,第六题,第七题,第八题,第九题,第十题
- 谁是最好的Coder
- [算法之动态规划] 基本思想
- zoj - 1094 - Matrix Chain Multiplication
- 系统默认声音值
- 字母小游戏
- 正三角形的外接圆面积
- MFC 组合框的使用
- 设计模式_001_DynamicProxy(动态代理)
- OpenCV直方图的使用
- Maximum sum on a torus Uva 10827
- shellsort