zoukankan      html  css  js  c++  java
  • Matrix Chain Multiplication (堆栈)

    题目链接:https://vjudge.net/problem/UVA-442

    题目大意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数。如果乘法无法进行,输出error。 假定A是m*n的矩阵,B是n*p的矩阵,乘法次数为m*n*p。如果A的列数不等于B的行数,则乘法

    无法进行。

      例如A是50*10的,B是10*20的,C是20*5的,则(A(BC))的乘法次数为10*20*5(BC的乘法次数)+50*10*5((A(BC)的乘法次数)=3500

    分析:本题的关键是解析表达式,本题的表达式比较简单,可以用一个栈来完成,遇到字母时入栈,遇到右括号时出栈并计算,然后结果入栈。 因为保证输入合法,括号无需入栈

    #include<iostream>
    #include<stack>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=26+5;
    struct Matrix
    {
        int a,b;
        //Matrix (int a=0,int b=0):a(a),b(b){}
        Matrix (int c=0,int d=0)
        {
            a=c;
            b=d;
        }
    }m[maxn];
    stack<Matrix> s;
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            string name;
            cin>>name;
            int k=name[0]-'A';//存下标
            cin>>m[k].a>>m[k].b;
        }
        string expr;
        while(cin>>expr)
        {
            int len=expr.length();
            bool error=false;
            int ans=0;
            for(int i=0;i<len;i++)
            {
                if(isalpha(expr[i])) 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;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    TTreeView.OnCustomDrawItem
    xe Style
    delphi 加密 XOR
    ReportMachine 自定义代码 画细线
    XE 安装后C盘占用太大,C盘空间清理
    FireFox 书签 缓存 路径设置
    Android 照相
    Android手机与服务器(案例一) webservice
    win10/win7 笔记本 开启虚拟无线 批处理
    Delphi XE6打电话
  • 原文地址:https://www.cnblogs.com/caijiaming/p/10340888.html
Copyright © 2011-2022 走看看