题目描述

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

例如:

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. C# Microsoft.Office.Interop.Excel.ApplicationClass 加载类型库/DLL 时出错

    问题  无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Intero ...

  2. First C++

    第一天接触C++,根据老师的作业写了两行代码...保存到Github了. https://github.com/BlackDn 首先是认识到自己的一些小错误,如打代码的时候会忘记这一行最后加“:”.可 ...

  3. uva-10954-贪心

    题意:俩个数相加,产生的和就是这次加法的代价,问,所有数都加起来,最小代价是多少 解题思路:贪心,每次都选取最小俩个数相加,如果只有一个数,计算完毕,注意,加法的和要再次入队列. #include & ...

  4. 1.如何在Cloud Studio上执行Python代码?

    1.在python文件下新建python文件,输入文件名后按Enter键生成,比如: one.py . 2.简单输入python代码: print "haha" 3.打开左下角的终 ...

  5. SPARK执行流程

    RDD运行原理 1.创建 RDD 对象 2.DAGScheduler模块介入运算,计算RDD之间的依赖关系.RDD之间的依赖关系就形成了DAG 3.每一个JOB被分为多个Stage,划分Stage的一 ...

  6. nodejs操作monggodb数据库封装

    var MongoClient=require('mongodb').MongoClient; var DbUrl='mongodb://localhost:27017/productmanage'; ...

  7. POI解析大量数据

    参考:https://blog.csdn.net/whandgdh/article/details/80267674

  8. leetcode997

    class Solution: def findJudge(self, N: int, trust: 'List[List[int]]') -> int: if N==1 and len(tru ...

  9. java 父类引用指向子类对象---动态绑定

    知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...

  10. DOS 格式化日期时间输出

    if "%date:~5,2%" lss "10" (set mm=0%date:~6,1%) else (set mm=%date:~5,2%)if &quo ...