您的位置:首页 > 大数据 > 人工智能

uva 442 Matrix Chain Multiplication

2017-07-06 15:50 363 查看
see:https://cn.vjudge.net/problem/UVA-442

因为确保括号是匹配的,所以左括号不处理,字母直接入栈,右括号时取栈顶两个出栈计算,并将新的入栈

//@auther zhou
//@Number 201408070203
//@start time:
//@finish time:
/*@此处注意:

*/
/* 测试数据

*/
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>

#include<stack>
using namespace std;

struct matrix{
int lf,rt;
matrix(int lf=0,int rt=0){
lf=lf;
rt=rt;
}
};

int main(){
int k;
cin>>k;
matrix temp;

matrix all[26];
char tmp;
for(int i=0;i<k;i++){
cin>>tmp>>temp.lf>>temp.rt;
all[tmp-'A']=temp;
}

stack<matrix> calculate;

string tocal;
cin>>tocal;
while(!cin.eof()){

int flag=0;//flag=0 不错,=1,出错
int total=0;
for(int i=0;i<tocal.length();i++){
if(tocal[i]=='('){
//遇左括号,不处理

}
else if(isalpha(tocal[i])){
calculate.push(all[tocal[i]-'A']);
}
else{//右括号,出栈计算
matrix r2=calculate.top();calculate.pop();
matrix r1=calculate.top();calculate.pop();
if(r1.rt!=r2.lf){
flag=1;
//cout<<"r1.rt"<<r1.rt<<" "<<"r2.lf"<<r2.lf<<endl;
break;
}
else{
total+=r1.lf*r1.rt*r2.rt;
}
matrix ans;
ans.lf=r1.lf;ans.rt=r2.rt;
calculate.push(ans);
//cout<<"push了一个"<<r1.lf<<" "<<r2.rt<<"的矩阵\n";
}
}
if(flag){
cout<<"error"<<endl;
}
else{
cout<<total<<endl;
}

cin>>tocal;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: