题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法次数。如果乘法无法进行,输出errror。假定A是m*n,B是n*p矩阵,那么AB是m*p矩阵,乘法次数为m*n*p。如果A的列数不等于B的行数,则乘法无法进行。
例如:A=50*10,B=10*20,C=20*5,则(A(BC))乘法次数为:10*20*5(BC的乘法次数)+50*10*5(A(BC)的乘法次数)=3500;
#include<stdio.h>
#include <algorithm>
#include <stack>
#include <iostream>
#include <string>
using namespace std;
struct node
{
int a,b;
node(int a=0,int b=0):a(a),b(b){}
}m[26];
stack<node>S;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
string name;
cin>>name;
int k=name[0]-'A';
cin>>m[k].a>>m[k].b;
}
string exper;
while(cin>>exper)
{
int len=exper.length();
bool error=false;
int ans=0;
for(int i=0;i<len;i++)
{
if(isalpha(exper[i])) S.push(m[exper[i]-'A']);
else if(exper[i]==')')
{
node m2=S.top();S.pop();
node m1=S.top();S.pop();
if(m1.b!=m2.a)
{
error=true;
break;
}
ans+=m1.a*m1.b*m2.b;
S.push(node(m1.a,m2.b));
}
}
if(error) printf("error\n");
else printf("%d\n",ans);
}
return 0;
}