Matrix Chain Multiplication (UVA - 442)

版权声明:欢迎转载!拒绝抄袭. https://blog.csdn.net/qq_36257146/article/details/87716517
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

struct Node
{
    int m;
    int n;
};
map<char,Node>matrics;

int main()
{
    int n;
    char c;
    Node M;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>c>>M.m>>M.n;
        matrics[c] = M;
    }
    string s;
    while(cin>>s)
    {
        int ans = 0;
        int flag = 0;
        stack<Node>ss;
        for(int i = 0;i<s.length();i++)
        {
            if(isalpha(s[i]))
            {
                ss.push(matrics[s[i]]);
            }
            else if(s[i]==')')
            {
                Node b = ss.top();ss.pop();
                Node a = ss.top();ss.pop();
                if(a.n!=b.m)
                {
                    flag = 1;
                    break;
                }
                ans += a.m*a.n*b.n;
                a.n = b.n;
                ss.push(a);
            }
        }
        if(flag) cout<<"error"<<endl;
        else cout<<ans<<endl;
    }
    return 0;
}
/**
9
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))
**/

猜你喜欢

转载自blog.csdn.net/qq_36257146/article/details/87716517
今日推荐