UVA-442 Matrix Chain Multiplication
2016-08-17 20:46
423 查看
2016-08-17
题目大意:给出 n 个 矩阵名,行,列,然后给一些式子,求每个式子需要经过多少次计算(乘和加),括号内先算。
解题思路:首先要对矩阵乘法有一些了解。
A(xy)、B(xy)两个矩阵能否进行乘法运算的充要条件是是否满足 A.y == B.x,如果满足,则会得到矩阵C(A.xB.y),这次运算进行的乘法的次数是 A.x*A.y*B.y。
知道这个之后就简单了,创建一个矩阵类型的栈,遇到字母就入栈,遇到)就出栈。两个矩阵判断,可以相乘就计算运算次数,算完之后再把得到的矩阵入栈,若全程都没出现不能相乘的情况,就输出运算次数,否则 error。
UVA - 442 Matrix Chain Multiplication
题目大意:给出 n 个 矩阵名,行,列,然后给一些式子,求每个式子需要经过多少次计算(乘和加),括号内先算。解题思路:首先要对矩阵乘法有一些了解。
A(xy)、B(xy)两个矩阵能否进行乘法运算的充要条件是是否满足 A.y == B.x,如果满足,则会得到矩阵C(A.xB.y),这次运算进行的乘法的次数是 A.x*A.y*B.y。
知道这个之后就简单了,创建一个矩阵类型的栈,遇到字母就入栈,遇到)就出栈。两个矩阵判断,可以相乘就计算运算次数,算完之后再把得到的矩阵入栈,若全程都没出现不能相乘的情况,就输出运算次数,否则 error。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n; char str[10000]; struct node { char z; int x, y; } s[200], stack[10000]; int find(char c) { for (int i = 0; i < n; i++) if ( c == s[i].z ) return i; } int main() { cin >> n; getchar(); for (int i = 0; i < n; i++) { scanf("%c%d%d", &s[i].z, &s[i].x, &s[i].y); getchar(); } while ( ~scanf("%s", str) ) { getchar(); int num = 0; int tag = 1; int sum = 0; int len = strlen(str); if ( len == 1 ) { cout << "0" << endl; continue; } for (int i = 0; i < len; i++) { if ( str[i] >= 'A' && str[i] <= 'Z' ) { stack[num].z = s[find(str[i])].z; stack[num].x = s[find(str[i])].x; stack[num].y = s[find(str[i])].y; num++; } if ( str[i] == ')' ) { if ( stack[num-2].y != stack[num-1].x ) { tag = 0; break; } sum += stack[num-2].x * stack[num-2].y * stack[num-1].y; stack[num-2].y = stack[num-1].y; num--; } } if ( !tag ) cout << "error" << endl; else cout << sum << endl; } return 0; }
相关文章推荐
- 【USACO题库】5.2.1 Snail Trails蜗牛的旅行
- 木雨音乐 项目开发(三)主界面MainActivity
- Lock锁,一次唤醒所有线程低性能的问题
- 多个线程执行多个任务,解决该问题的死锁问题
- IO流——数据类型处理流(DataInputStream和DataOutputStream)
- sleep和wait有什么区别?
- AI,DM,ML,PR的区别与联系
- AIDL(续)
- ActivityThread——main方法
- AIX信號初探
- 错误:bject contains invalid bitcode
- MFC的BeginWaitCursor和EndWaitCursor函数
- HDU2476——String painter(区间dp)
- Mac下首次安装tensorflow运行时会出现ImportError: numpy.core.multiarray failed to import的解决方案
- 防止出现 Capturing 'self' strongly in this block is likely to lead to a retain cycle [duplicate]
- BoxCars: 3D Boxes as CNN Input for Improved Fine-Grained Vehicle Recognition
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- ST3插件——PlainTasks的使用
- 信号被挂起,sigwait()函数的作用
- Libev源码分析06:异步信号同步化--sigwait、sigwaitinfo、sigtimedwait和signalfd