栈的应用-矩阵链乘uva442

来源:互联网 发布:python 中英文摘要 编辑:程序博客网 时间:2024/05/17 01:32

思路没理清。。。

需要用两个栈,一个存括号,另一个村矩阵,当遇到)的时候矩阵的栈弹出两个进行计算(刚开始以为可能以三个在一个括号里。。。),然后加入新矩阵。

#include<iostream>#include<cstdio>#include<string>#include<stack>#include<map>using namespace std;const int maxn=30;map<char,pair<int,int> >marix;int n,ans;bool solve(string s){    ans=0;    stack<char> st1;    stack<pair<int,int> > st2;    int len=s.size();    for(int i=0;i<len;i++)    {        if(s[i]=='(')st1.push(s[i]);        else if(isalpha(s[i]))        {            st2.push(marix[s[i]]);        }        else        {            st1.pop();            pair<int,int> tmp1=st2.top();st2.pop();            pair<int,int> tmp2=st2.top();st2.pop();            if(tmp1.first!=tmp2.second)return false;            ans+=tmp2.first*tmp2.second*tmp1.second;            st2.push(make_pair(tmp2.first,tmp1.second));        }    }    if(!st1.empty())return false;    return true;}int main(){    cin>>n;    char a;    int x,y;    string s;    for(int i=0;i<n;i++)    {        cin>>a>>x>>y;        marix[a]=make_pair(x,y);    }    while(cin>>s)    {        if(solve(s))cout<<ans<<endl;        else cout<<"error"<<endl;    }    return 0;}



0 0
原创粉丝点击