首页 > 其他 > 详细

stack UVA 442 Matrix Chain Multiplication

时间:2015-04-20 22:04:36      阅读:131      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!