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;
}
因为确保括号是匹配的,所以左括号不处理,字母直接入栈,右括号时取栈顶两个出栈计算,并将新的入栈
//@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;
}
相关文章推荐
- UVA442 Matrix Chain Multiplication【DP】
- UVA - 442 Matrix Chain Multiplication
- UVa 442 Matrix Chain Multiplication(栈的应用)
- UVA_442: Matrix Chain Multiplication
- 【例题 6-3 UVA - 442】Matrix Chain Multiplication
- uva-442 Matrix Chain Multiplication
- uva 442 Matrix Chain Multiplication(模拟)
- UVa 442 Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- UVa 442 - Matrix Chain Multiplication
- UVa 442 (栈) Matrix Chain Multiplication
- UVa 442 - Matrix Chain Multiplication解题报告
- UVa 442 Matrix Chain Multiplication(栈)
- uva 442 - Matrix Chain Multiplication
- UVA 442 Matrix Chain Multiplication
- UVA 442(p141)----Matrix Chain Multiplication
- 例题6-3 Matrix Chain Multiplication ,Uva 442
- UVA - 442 Matrix Chain Multiplication
- uva 442 Matrix Chain Multiplication
- 栈对于表达式求值的特殊作用&&UVa442 Matrix Chain Multiplication(矩阵链乘)的理解与解析