题目地址:

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&&tqId=21293&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking

题目内容

矩阵乘法的运算量与矩阵乘法的顺序强相关。

例如:

A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵

计算ABC有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。

编写程序计算不同的计算顺序需要进行的乘法次数

输入描述:

输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则

输出描述:

输出需要进行的乘法次数

示例1

输入

3

50 10

10 20

20 5

(A(BC))

输出

3500

思路

显然用栈做。但是细节要把控好。

考虑这样的数据,代码也应该能handle:

4

50 10

10 20

20 5

5 6

(A(BCD))

输出

9000

思路:

每个字母肯定不会重复,每个字母对应到一个(r,c)元组上,弄成结构体比较方便。

将字母括号串从左到右扫描,遇到')'则弹栈,一直弹到遇到'(',那么弹出的这些字母(对应到一个个矩阵,也对应到一个包含(r,c)维度信息的结构体),它们的列数c相乘,再乘以最后弹出元素(也即紧邻'('右边的字母)的行数r。

注意,这里还没有结束,遇到了'('应该把弹出这些元素计算结果进行保存,并且,更新一下维护的字母括号序列的元素,我的做法是把原有的“(XXXXZ)”这个东西用Z来替代,因为Z的列数c后续还是会被使用。

放码过来


#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <climits>
#include <stack> using namespace std; void EX21_clean() {
int n; struct Dim { int r, c; }; while (cin >> n) {
vector<Dim> vd;
Dim dim; for (int i = 0; i < n; i++) {
cin >> dim.r >> dim.c;
vd.push_back(dim);
} string s; cin >> s;
stack<Dim> stk;
int ans = 0;
stack<char> cal;
int delta; int idx;
char ch1, ch2; for (int i = 0; i < s.length(); i++) {
if (s[i] == ')') {
if (cal.size() != 1) {
ch1 = cal.top(); cal.pop();
if (ch1 == '(') {
continue;
}
idx = ch1 - 'A';
dim = vd[idx]; delta = dim.c;
while (!cal.empty()) {
ch2 = cal.top(); cal.pop();
idx = ch2 - 'A';
if (ch2 == '(') {
cal.push(ch1); //注意此处
break;
}
dim = vd[idx];
delta *= dim.c;
}
delta *= dim.r;
ans += delta;
}
}
else {
cal.push(s[i]);
}
}
cout << ans << endl;
}
} int main() {
//EX1();
//EX2();
//EX3();
//EX4();
//EX5();
//EX6();
//EX7(); //EX11();
//EX12();
//EX13();
//EX14();
//EX15();
//EX16();
//EX17(); EX21_clean(); return 0;
}

矩阵乘法的运算量计算(华为OJ)的更多相关文章

  1. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

    本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...

  2. 【转】Matrix67:十个利用矩阵乘法解决的经典题目

    好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...

  3. 矩阵乘法code

    VOJ1067 我们可以用上面的方法二分求出任何一个线性递推式的第n项,其对应矩阵的构造方法为:在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0.例如 ...

  4. 51nod 1137 矩阵乘法【矩阵】

    1137 矩阵乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个N * N的矩阵M1和M2,输出2个矩阵相乘后的结果.   Input 第1行 ...

  5. 华为OJ平台——矩阵乘法

    题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...

  6. WUSTOJ 1232: 矩阵乘法(C)

    1232: 矩阵乘法 Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld Description 小明明正在学习线性代数,老师布置 ...

  7. 矩阵乘法优化DP复习

    前言 最近做毒瘤做多了--联赛难度的东西也该复习复习了. Warning:本文较长,难度分界线在"中场休息"部分,如果只想看普及难度的可以从第五部分直接到注意事项qwq 文中用(比 ...

  8. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  9. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. LwIP Application Developers Manual2---Protocols概览

    1.前言 本文是对LwIP Application Developers Manual的翻译 lwIP是模块化的并支持广泛的协议,这些大部分协议可以被裁减从而减小代码的尺寸 2.协议概览 链路层和网络 ...

  2. AUTOML --- Machine Learning for Automated Algorithm Design.

    自动算法的机器学习: Machine Learning for Automated Algorithm Design. http://www.ml4aad.org/ AutoML——降低机器学习门槛的 ...

  3. js学习笔记--基础部分

    自增 自增 ++ 通过自增可以使变量在自身的基础上增加1 对于一个变量自增以后,原变量的值会立即自增1 无论使a++, 还是++a,都会立即使原变量的值自增1. 不同的是a++ 和++a的值不同. a ...

  4. longzhuapp项目笔记

    1.配置不同环境的打包命令

  5. cocosCreater开发时遇到的问题

    生成vscode任务后无法编译: ctrl +p  -> 输入task compile 编译任务时提示 :由于使用任务版本 0.1.0,以下工作区文件夹将被忽略 这是cocos默认生成的code ...

  6. Ubuntu 18.04使用sudo pip3报错

    在使用sudo pip3 install python库的时候出现如下警告: The directory '/home/lzhu/.cache/pip/http' or its parent dire ...

  7. where(泛型类型约束)

    .NET支持的类型参数约束有以下五种: where T : struct T必须是一个结构类型 where T : class T必须是一个类(class)类型,不能是结构(structure)类型 ...

  8. svn:Item ‘XXXXXX’ is out of date

    问题描述:     工作副本没有更新到最新版本 svn: 提交失败(细节如下): svn: 目录 "D:\develop\workspace\gxcjx\src\main\resources ...

  9. SQL Server 之 子查询与嵌套查询

    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用 ...

  10. Ex3_28 在2SAT问题中,给定一个字句的集合..._第十二次作业

    参考答案 ----------------------------------------------------------------------------------------------- ...