华为OJ矩阵乘法计算量估算

来源:互联网 发布:单片机datesheet是什么 编辑:程序博客网 时间:2024/05/01 14:47

描述

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


例如:

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

 

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

 

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

 

 

 

 

知识点字符串运行时间限制10M内存限制128输入

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

3       //矩阵个数n 
50 10   //矩阵A的行数50,列数10
10 20   //矩阵B的行数10,列数20
20 5    //矩阵C的行数20,列数5
(A(BC)) //矩阵从A开始命名,A、B、C、D...以此类推,通过括号表示运算顺序
 

输出

输出需要进行的乘法次数

样例输入3 50 10 10 20 20 5 (A(BC))样例输出3500
#include <iostream>    #include <vector>#include <string>#include <stack>#include <map>#include <algorithm>using namespace std;struct matrix{int row;int col;};void main(){vector<matrix> vec;stack<matrix> sta;int n;cin >> n;for (int i = 0; i < n; i++){matrix tmp;cin >> tmp.row >> tmp.col;vec.push_back(tmp);}string str;cin >> str;int result = 0;for (int i = 0; i < str.length(); i++){if (str[i] >= 'A'&&str[i] <= 'Z'){int index = str[i] - 'A';sta.push(vec[index]);}else if (str[i] == ')'){matrix value1 = sta.top();sta.pop();matrix value2 = sta.top();sta.pop();matrix value3;value3.row = value2.row;value3.col = value1.col;sta.push(value3);result += value2.row*value2.col*value1.col;}}cout << result;}


0 0
原创粉丝点击