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矩阵链乘的主要内容,如果未能解决你的问题,请参考以下文章

矩阵链乘(解析表达式)

矩阵链乘最优化实现

UVa 442 Matrix Chain Multiplication(栈的应用)

矩阵链乘

矩阵链乘问题

矩阵最优链乘及Java实现