题目:Matrix Chain Multiplication
题意:给定一串矩阵乘法的式子,求需要做几次乘法。
注意:括号中最多有2个矩阵。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<deque>
using namespace std;
struct Pair {
int x,y;
Pair(int one,int two) {
x=one,y=two;
}
Pair() {}
};
int n;
Pair a[10000];
int mul(Pair x,Pair y) {
if(x.x==-1) return 0;
if(x.y!=y.x) return -1;
return x.x*x.y*y.y;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
string str;
int x,y;
cin>>str;
scanf("%d%d",&x,&y);
a[str[0]-'A'+1]=Pair(x,y);
}
string x;
while(cin>>x) {
int sum=0;
stack<Pair> s;
for(int i=0; i<x.size(); i++) {
if(isalpha(x[i])) s.push(a[x[i]-'A'+1]);
else if(x[i]==')') {
Pair x=s.top();
s.pop();
Pair y=s.top();
s.pop();
int t=mul(y,x);
if(t==-1) goto END;
else sum+=t,s.push(Pair(y.x,x.y));
}
}
printf("%d\n",sum);
continue;
END:printf("error\n");
}
return 0;
}