您的位置:首页 > 大数据 > 人工智能

hdu 1082 Matrix Chain Multiplication

2013-04-21 15:01 323 查看
栈的应用。

当是‘(’时,不处理。

当是‘)’时,出栈前两个矩阵,算出这两个矩阵的乘积,然后,把新的矩阵入栈。

当是‘字符’时,直接进栈。

#include <iostream>
#include<stack>
#include<string>
using namespace std;

struct Matrix
{
int r,c;
Matrix(int a,int b)
{
r=a;
c=b;
}
Matrix(){}
};

int main()
{
//	freopen("in.txt","r",stdin);
int n;
Matrix m[26];
stack<Matrix> s;
scanf("%d",&n);
char ch[3];
while(n--)
{
cin>>ch;
scanf("%d %d",&m[ch[0]-'A'].r,&m[ch[0]-'A'].c);
}
string exp;
while(cin>>exp)
{
while(!s.empty()) s.pop();
int i=0;
int sum=0;
while(exp[i])
{
if(exp[i]=='(')
{
i++;
continue;
}
if(exp[i]==')')
{
Matrix b=s.top();
s.pop();
Matrix a=s.top();
s.pop();
if(a.c!=b.r)
break;
sum+=a.r*a.c*b.c;
Matrix tmp(a.r,b.c);
s.push(tmp);
i++;
continue;
}
s.push(m[exp[i++]-'A']);
}
if(!exp[i]) printf("%d\n",sum);
else printf("error\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu 1082