UVA 442 Matrix Chain Multiplication
题意:
给出几个矩阵和带括号优先级的矩阵连乘,求一共计算多少个数据。
题解:
将已知的矩阵存成结构体,安输入顺序存入栈中,
不管前括号,遇到后括号取出两个相乘,
相乘后的新矩阵定义新结构体,再放回栈中。
#include<string>
#include<stack>
#include<cstdio>
#include<iostream>
using namespace std;
struct Mat{
int x,y;
}m[30];
int main()
{
int T;
char ch;
string t;
stack<Mat> s;
scanf("%d",&T);
for(int i=0;i<T;i++){
scanf(" %c",&ch);
scanf("%d%d",&m[ch-'A'].x,&m[ch-'A'].y);
}
while(cin>>t){
int sum=0;
bool ok=true;
for(int i=0;i<t.length();i++){
if(t[i]==')'){
Mat b=s.top();s.pop();
Mat a=s.top();s.pop();
if(a.y==b.x){
sum+=a.x*a.y*b.y;
Mat c;c.x=a.x;c.y=b.y;
s.push(c);
}
else{ok=false;break;}
}
else if(t[i]!='(')
s.push(m[t[i]-'A']);
}
if(ok)printf("%d\n",sum);
else printf("error\n");
}
}