Uva矩阵链乘
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva矩阵链乘相关的知识,希望对你有一定的参考价值。
输入
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))
输出:
0
0
0
error
10000
error
3500
15000
40500
47500
15125
注意,出栈时,第一个出来的时c2!
#include<bits/stdc++.h>
using namespace std;
struct matrix
{
int a,b;
}M[27];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
char ch;
int a,b;
cin>>ch>>a>>b;
M[ch-'A'].a=a;
M[ch-'A'].b=b;
}
string str;
while(cin>>str)
{
stack<matrix>c;
int ans=0,flag=0;
for(int i=0;str[i];i++)
{
if(str[i]>='A'&&str[i]<='Z') c.push(M[str[i]-'A']);
else if(str[i]==')')
{
matrix c1,c2,c3;
c2=c.top();
c.pop();
c1=c.top();
c.pop();
if(c1.b!=c2.a)
{
flag=1;
break;
}
c3.a=c1.a;
c3.b=c2.b;
c.push(c3);
ans+=c1.a*c1.b*c2.b;
}
}
if(flag) cout<<"error"<<endl;
else cout<<ans<<endl;
}
return 0;
}
以上是关于Uva矩阵链乘的主要内容,如果未能解决你的问题,请参考以下文章