码迷,mamicode.com
首页 > 其他好文 > 详细

stack UVA 442 Matrix Chain Multiplication

时间:2015-04-20 22:05:05      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

 

题目传送门

/*
    stack 容器的应用:矩阵的表达式求值
    A 矩阵是a * b,B 矩阵是b * c,则A * B 是a * c
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;

const int MAXN = 1e4 + 10;
const int INF = 0x3f3f3f3f;

struct Matrix
{
    int a, b;
    Matrix (int a=0, int b=0) : a (a), b (b) {};
}m[26];

int main(void)        //UVA 442 Matrix Chain Multiplication
{
    //freopen ("UVA_446.in", "r", stdin);

    int n;
    string name;

    cin >> n;
    for (int i=1; i<=n; ++i)
    {
        cin >> name;
        int k = name[0] - A;
        cin >> m[k].a >> m[k].b;
    }

    string expr;
    stack <Matrix> s;
    while (cin >> expr)
    {
        int len = expr.length ();
        bool error = false;
        int ans = 0;

        for (int i=0; i<len; ++i)
        {
            if (expr[i] >= A && expr[i] <= Z)    s.push (m[expr[i]-A]);
            else if (expr[i] == ))
            {
                Matrix m2 = s.top ();    s.pop ();
                Matrix m1 = s.top ();    s.pop ();
                if (m1.b != m2.a)    {error = true;    break;}
                ans += m1.a * m1.b * m2.b;
                s.push (Matrix (m1.a, m2.b));
            }
        }

        if (error)    cout << "error" << endl;
        else    cout << ans << endl;
    }


    return 0;
}

 

stack UVA 442 Matrix Chain Multiplication

标签:

原文地址:http://www.cnblogs.com/Running-Time/p/4442622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!