一、题目
二、示例
三、代码
while True:
try:
n = int(input())
temp = []
stack = []
result = 0
for i in range(n):
temp.append(list(map(int, input().split())))
for i in input():
if i.isalpha():
stack.append(temp[ord(i) - 65])
elif i == ')' and len(stack) >= 2:
right = stack.pop()
left = stack.pop()
result += left[0] * left[1] * right[1]
stack.append([left[0], right[1]])
print(result)
except:
break
四、算法说明
矩阵相乘的顺序由括号规定,首先借助ASCII码,将字母规定的顺序转换成第几个矩阵temp[ord(i) - 65]
,遍历输入的所有矩阵temp
,读到一个新的矩阵时(标记为A-Z),将其放入栈stack
中;
当读到右括号的时候,说明当前栈顶的两个矩阵需要进行运算,我们此时统计,并累加本次运算的次数result += left[0] * left[1] * right[1]
,然后将计算后的新矩阵重新入栈stack.append([left[0], right[1]])
,直到所有的右括号都被读完,返回最终结果。
胡萝卜
2022年3月3日15:11:34
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |