华为机试题70-矩阵乘法计算量估算

2023-11-02

描述

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

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

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

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

数据范围:矩阵个数:1≤n≤15 ,行列数:1≤rowi​,coli​≤100 ,保证给出的字符串表示的计算顺序唯一

进阶:时间复杂度:O(n) ,空间复杂度:O(n)

输入描述:

输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则
计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!

输出描述:

输出需要进行的乘法次数

示例1

输入:

3
50 10
10 20
20 5
(A(BC))

输出:

3500


解题思路:

这道题比四则运算那道题简单太多了。。。

根据题目描述,可知,矩阵的计算顺序肯定是唯一的,不会出现(A(BC)D)这种计算顺序不唯一的用例,这个式子的BC肯定是先算的,但是,是先算A(BC),还是(BC)D,就不一定了。但是题目说了计算顺序肯定是唯一的,所以题目的用例肯定会加()。

那么问题就简单了,我们遇到字母才把相应的矩阵行列数压栈,遇到不管,遇到就弹出最近的两个矩阵行列数,计算其进行乘法的次数,并把新的矩阵的行列数压入栈中。

代码如下:

#include <stdio.h>
int main()
{
    int n,input[15][2],stack[15][2],cnt=0,i,j=0;
    char str[50];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&input[i][0],&input[i][1]);
    }
    scanf("%s",str);
    i=0;
    while(str[i]!='\0')
    {
        if(str[i]>='A'&&str[i]<='Z')
        {
            stack[j][0]=input[str[i]-'A'][0];
            stack[j][1]=input[str[i]-'A'][1];
            j++;
        }
        else if(str[i]==')')
        {
            cnt+=stack[j-1][0]*stack[j-1][1]*stack[j-2][0];
            stack[j-2][1]=stack[j-1][1];
            j--;
        }
        i++;
    }
    printf("%d\n",cnt);
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为机试题70-矩阵乘法计算量估算 的相关文章

  • 客户端下载

    include
  • 设计模式的 C++ 实现---中介者模式

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 工厂方法模式 二 抽象工厂模式 一 抽象工厂模式 二 原型模式 外观模式 前言 中介者模式主要用于多个对象之间的交互 所谓交互就是会互相调用对方的接口方法 中
  • JDK1.8 下载及安装

    JDK 下载 官网下载地址 https www oracle com java technologies javase downloads html 打开网页后找到 Java SE 8u241 点击 JDK Download 选择电脑对应的
  • Grafana插件Plugin中文汉化

    示例Github地址 汉化三方插件 前面说过汉化Grafana的工作 目前在7 2 1上面 大部分已经完成 细节继续完善 今天考虑在第三方插件上做一些汉化 点到插件一看全是英文感觉很突出 领导看到了也不爽啊 找个软的捏 饼图在展示方面比较直
  • C++ OJ习题练习(十)设计管理出版物的类

    Problem Description 某出版社发行图书和光盘 利用继承设计管理出版物的类 要求如下 建立一个基类Publication存储出版物的标题title 出版物名称name 单价price及出版日期date 用Book和CD类分别

随机推荐

  • Horizon Client 配置设置和命令行选项

    Horizon Client 配置设置和命令行选项 Twitter FaceBook LinkedIn Weibo 添加到库 添加到库 RSS 下载 PDF 发送反馈 反馈 编辑 评论 更新时间 2022年10月05日 选择的产品版本 VM
  • Hexo博客优化之Next主题美化

    前言 有了前面几篇博客的介绍 我们就可以很容易的搭建并编辑我们的博客了 不过既然是属于自己的博客网站 自然也就想让其更加美观 更有意思 所以呢我下面介绍一下Hexo博客的主题美化操作 1 Next主题 Hexo博客支持很多主题风格 其中Ne
  • error trying to connect: 远程主机强迫关闭了一个现有的连接。 (os error 10054)

    今天运行自动化测试的代码时 出现了这个问题 检索了一下 发现是chrome版本更新 导致驱动chromedriver不适配导致的 后来找了淘宝镜像 发现只有到114 还是不能使用 最后还是找到了 提供一下链接 不知道需不需要科学上网 我是开
  • C语言 看图说话-指针类型的扩展——数组指针

    1 指针数组是什么 答 指针类型的数组 2 数组指针是什么 答 指向数组的指针 它是扩展的指针类型 3 数组指针与基本类型指针的区别 答 在这个图片中 第一行就为基本类型的指针 不难看出 数组指针所指向的空间更大 再看后两行 前边为指针数组
  • Matlab读取CSV文件,并进行矩阵处理

    我们在进行科研时会碰到仪器生成的数据为 csv的文件 这时候使用matlab进行读取处理 核心思想是对读取到的数据按照矩阵进行处理 处理过程如下 第一步 filename D csv 读入csv数据 截取数值部分 诀窍 把矩阵想象成矩形 左
  • 在Linux(Ubuntu20.04)上编译Chromium,附相关命令学习解释

    以下内容基于Google官方文档 系统要求 8GB 以上内存 建议 16GB 以上 实测 11GB 可以稳定 build 说明见下文 100GB 以上空闲空间 实测 chromium 文件夹最少需要 65GB 已安装 Python3 和 G
  • CAN基础概念

    文章目录 目的 控制器 收发器 总线 帧格式 CAN2 0和CAN FD 波特率与采样点 工作模式 总结 目的 CAN是非常常用的一种数据总线 被广泛用在各种车辆系统中 大多数时候CAN的控制器和收发器干了比较多的工作 从而对于写代码使用来
  • 手动搭建webase(2)——节点管理服务

    前提条件 拉取代码 git clone https github com WeBankFinTech WeBASE Node Manager git 若因网络问题导致长时间下载失败 可尝试以下命令 git clone https gitee
  • 在uni-app中查询dom元素节点信息

    查询节点信息的对象 selectorQuery in component 将选择器的选取范围更改为自定义组件 component 内 返回一个 SelectorQuery 对象实例 初始时 选择器仅选取页面范围的节点 不会选取任何自定义组件
  • LableMe安装及初步使用(Mac也适用)

    环境 mac OS anaconda3 1 首先安装anaconda3 推荐此网站 下载较快https mirrors tuna tsinghua edu cn anaconda archive 下载完毕安装即可 本人之前就安装过了 在此就
  • vscode 终端无法执行pip

    1 在Windows应用中找到Windows PowerShell 右键以管理员运行 2 在命令框输入 set ExecutionPolicy RemoteSigned 回车 3 根据需要选择 这里我选择的是A 成功解决了问题 ps pow
  • Spring Boot学习之旅:(四)springboot 整合 fastjson

    springboot 默认使用的 jackson 但是听说某宝的fastjson 性能很好 而且平时用的习惯 所以来整合一下 首先在pom 中导入依赖
  • QT登陆注册界面练习

    一 界面展示 二 主要功能界面代码 include widget h include ui widget h Widget Widget QWidget parent QMainWindow parent ui new Ui Widget
  • 【Shell牛客刷题系列】SHELL13 去掉所有包含this的句子:awk与gawk命令的进阶使用

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了用于模式扫描和处理语言的gawk命令 然
  • Django 静态文件

    静态文件 1 什么是静态文件 对于前端已经写好了的文件 我们只是拿过来使用 那么这些文件都可以称之为叫 静态文件 静态文件可以是 bootstrap一类的前段框架 已经写好了的图片 css js 静态文件默认全都放在static文件夹下 s
  • vue使用Monaco editor

    1 项目中使用monaco editor首先要安装 npm install monaco editor S 2 在组件中引用并使用 初始化 更改内容 销毁
  • day 7

    封装一个学生的类 定义一个学生这样类的vector容器 里面存放学生对象 至少3个 再把该容器中的对象 保存到文件中 再把这些学生从文件中读取出来 放入另一个容器中并且遍历输出该容器里的学生 include
  • windows系统中用Python调用linux系统shell脚本

    一 windows系统先安装 1 安装python3 5 2 安装paramiko pip install paramiko 3 卸载cryptography 2 5 python m pip uninstall cryptography
  • linux+rwx+权限值,linux权限管理:rwx

    权限管理简介 r w x 对文件及目录进行权限管理 从而达到文件及目录管理 1 rwx对于文件而言 r 可读 可以使用类似cat等命令查看文件内容 w 可写 可以编辑或删除此文件 x 可执行 exacutable 可以命令提示符下当作命令提
  • 华为机试题70-矩阵乘法计算量估算

    描述 矩阵乘法的运算量与矩阵乘法的顺序强相关 例如 A是一个50 10的矩阵 B是10 20的矩阵 C是20 5的矩阵 计算A B C有两种顺序 AB C 或者 A BC 前者需要计算15000次乘法 后者只需要3500次 编写程序计算不同