描述
矩阵乘法的运算量与矩阵乘法的顺序强相关。
例如:
A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵
计算ABC有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。
编写程序计算不同的计算顺序需要进行的乘法次数。
本题含有多组样例输入!
输入描述:
输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!输出描述:
输出需要进行的乘法次数示例1
输入:
输出:
3500解析:
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
代码实现如下:
while True: try: n = int(input()) arr = [] order = [] res = 0 for i in range(n): arr.append(list(map(int, input().split()))) f = input() #(A(B(C(D(E(F(GH))))))) #((AB)C) for i in f: if i.isalpha(): order.append(arr[ord(i)-65]) elif i==')' and len(order)>=2: #print(order) b = order.pop() a = order.pop() #print(a,b) res += a[1] * b[1] * a[0] order.append([a[0],b[1]]) print(res) #print(order) except Exception as e: #print(e) break