HDU 1082 Matrix Chain Multiplication

评估多个矩阵乘法的基本运算次数

乍一看与分治算法有关,其实题目是个模拟矩阵相乘次数的问题,自定义类型存储矩阵,主要操作用栈实现。遇到'('继续,遇到')'算栈顶两个矩阵相乘并再放进栈顶,附代码

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <stack>
 5 using namespace std;
 6 struct Max {
 7     int row;
 8     int col;
 9 } m[100];
10 bool flg;
11 int n,num;
12 char c,ch[100];
13 int main() {
14     //freopen("C:\\CODE\\in.txt", "r", stdin);
15     //freopen("C:\\CODE\\out.txt","w",stdout);
16     scanf("%d",&n);
17     for(int i=0; i<n; i++) {
18         cin>>c>>m[i].row>>m[i].col;
19     }
20     getchar();
21     while(gets(ch)) {
22         stack<int> s;
23         flg=false;
24         int x=30;
25         num=0;
26         for(int i=0; i<strlen(ch); i++) {
27             if(ch[i]=='(')
28                 continue;
29             if(ch[i]==')') {
30                 int a=s.top();
31                 s.pop();
32                 int b=s.top();
33                 s.pop();
34                 if(m[a].row!=m[b].col) {
35                     flg=true;
36                     break;
37                 } else {
38                     num+=(m[a].row*m[a].col*m[b].row);
39                     m[x].row=m[b].row;
40                     m[x].col=m[a].col;
41 
42                     s.push(x);
43                     x++;
44                 }
45             } else {
46                 s.push(ch[i]-'A');
47             }
48         }
49         if(flg)
50             puts("error");
51         else
52             printf("%d\n",num);
53     }
54 
55     //fclose(stdin);
56     return 0;
57 }

 

转载于:https://www.cnblogs.com/livelihao/p/5177502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值