#第一个矩阵为A,第二矩阵为B,若字母不是这个意思,下面代码无法通过 n=int(input()) dic={} #存储所有矩阵 for i in range(n): dic[chr(ord('A')+i)]=list(map(int,input().split())) #将所有矩阵按字母A~Z存到字典里,值为(行,列) s=input() s1=[] num=0 for i in s: #遍历字符串 if i!=')': #未遇到')'时,一直压栈 s1.append(i) else: #遇到')',开始循环弹出两个字母,用其对应的矩阵运算 while True: if s1[-2]=='(': #遇到'(',删除它,并跳出循环 s1.pop(-2) break else: b=s1.pop() #弹出两个字母 a=s1.pop() if dic[a][1]!=dic[b][0]: #排除这两个矩阵是(m,n)(c,m)情况 a,b=b,a #让两个矩阵变成(c,m)(m,n),保证乘法次数和运算后的矩阵没问题 dic[a+'*'+b]=[dic[a][0],dic[b][1]] #将运算后的矩阵保存到字典里 s1.append(a+'*'+b) 运算后的新矩阵,将其对应的key值入栈 else: dic[a+'*'+b]=[dic[a][0],dic[b][1]] s1.append(a+'*'+b) num+=dic[a][0]*dic[a][1]*dic[b][1] #将矩阵相乘的次数累加到num print(num)