题目描述

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

例如:

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

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

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

输入描述:

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

输出描述:

输出需要进行的乘法次数

示例1

输入

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

输出

3500

代码如下:

 package com.yzh.xuexi;

 import java.util.Scanner;
import java.util.Stack; public class JuZhengCalculate { public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int n=Integer.parseInt(scanner.nextLine());
int[][] arr=new int[n][];
for(int i=0;i<arr.length;i++){
arr[i]=new int[2];
String[] sArr=scanner.nextLine().split("\\s+");
arr[i][0]=Integer.parseInt(sArr[0]);
arr[i][1]=Integer.parseInt(sArr[1]);
}
String rule=scanner.nextLine();
System.out.println(juZhengCalculate(arr, rule)); }
scanner.close();
}
/*
* 用栈(依次遍历):遇到“(”直接跳过,什么也不做。遇到“字母”时就压栈,遇到“)”时就连续出两个字母(每个字母对应一个矩阵),做相应计算(累加每次乘法次数),这时会得到一个新矩阵,
* 用一个不重复的字母对应新矩阵并压栈。处理完最后一个“)”得到计算结果(累加值)。
*/
private static int juZhengCalculate(int[][] arr,String rule) {
Stack<Character> stack=new Stack<Character>();
char[] cArr=rule.toCharArray();
char c1,c2;
int number=0;
int[] jzArr1,jzArr2;
int[][] newArr=new int[26][];
char newC='a';
for (int i = 0; i <cArr.length; i++) {
if (cArr[i]>=65&&cArr[i]<=90) {
stack.push(cArr[i]);
}else if (cArr[i]==')') {
if (stack.size()==1) {
return number;
}
c2=stack.pop();
c1=stack.pop();
if (c1>=65&&c1<=90) {
jzArr1=arr[c1-65];
}else {
jzArr1=newArr[c1-97];
} if (c2>=65&&c2<=90) {
jzArr2=arr[c2-65];
}else {
jzArr2=newArr[c2-97];
}
number+=jzArr1[0]*jzArr1[1]*jzArr2[1];
int[] tempArr={jzArr1[0],jzArr2[1]};
newArr[newC-97]=tempArr;
stack.push(newC++);
}
}
return number; }
}
3500

解题(JuZhengCalculate-矩阵乘法计算量)的更多相关文章

  1. 深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)

    目录: 1.经典的卷积层是如何计算的 2.分析卷积层的计算量 3.分析卷积层的参数量 4.pytorch实现自动计算卷积层的计算量和参数量 1.卷积操作如下: http://cs231n.github ...

  2. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  3. 矩阵乘法的运算量计算(华为OJ)

    题目地址: https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&&tqId=21293 ...

  4. 洛谷 P1527 [国家集训队]矩阵乘法 解题报告

    P1527 [国家集训队]矩阵乘法 题目描述 给你一个\(N*N\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(K\)小数. 输入输出格式 输入格式: 第一行两个数\(N,Q\),表示矩阵大 ...

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

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

  6. 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)

    问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N.M(1<=N<=30, 0& ...

  7. 4-2.矩阵乘法的Strassen算法详解

    题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...

  8. cuda(2) 矩阵乘法优化过程

    Created on 2013-8-5URL : http://blog.sina.com.cn/s/blog_a502f1a30101mjch.html@author: zhxfl转载请说明出处 # ...

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

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

随机推荐

  1. JAVA 操作mysql 存储 调用

    HashMap map = new HashMap(); map.put("a", 9); map.put("b", ""); List&l ...

  2. 《算法》第六章部分程序 part 5

    ▶ 书中第六章部分程序,包括在加上自己补充的代码,网络最大流 Ford - Fulkerson 算法,以及用到的流量边类和剩余流量网络类 ● 网络最大流 Ford - Fulkerson 算法 pac ...

  3. IP与十进制相互转化

    def ip2Long(ip: String): Long = { val fragments = ip.split("[.]")  var ipNum = 0L  for (i ...

  4. centos使用记

    20180404:今天在笔记本上安装了centos6.9,第一次安装的7.4时进不了安装界面,后来下载了6.9版的,可以安装.安装完后启动时出现fail reg的错误,然后提示登陆,不知是用户名为:r ...

  5. 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  6. leetcode1009

    class Solution: def bitwiseComplement(self, N: int) -> int: if N==0: return 1 elif N==1: return 0 ...

  7. node.js 递归创建多级目录

    fs.mkdir只能创建一级目录,所以我们可以自定义一个mkdirs函数,利用递归和回调来实现创建多级目录. function mkdirs(dirname, callback) { //检测目录是否 ...

  8. 根据svm将视频帧转换为img

    # -*- coding: utf-8 -*- """ Created on Mon Oct 1 09:32:37 2018 @author: Manuel " ...

  9. 反射机制(java)

    反射机制 反射机制可通过在运行时加载类名而获取类,并对其进行操作.工厂模式,动态代理中较常用到. 在实际场景中:由于有好多类具有共同的接口样式,而他们又用的不是很频繁,如果在服务器中保有这些类会占用资 ...

  10. js判断对象

    一般学java的小伙伴,刚开始写js时如果遇到要判断一个字符串是否不为空,往往会这样写 if(str != undefined && str != null && st ...