博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵链乘(Matrix Chain Multiplication)
阅读量:5275 次
发布时间:2019-06-14

本文共 1101 字,大约阅读时间需要 3 分钟。

  输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数。如果乘法无法进行,则输出error。假定A是m*n矩阵,B是n*p矩阵,那么A*B是m*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
#include
#include
#include
using namespace std;struct Matrix { int a, b; Matrix(int a = 0, int b = 0) :a(a), b(b) {}}m[26];stack
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) printf("error\n"); else printf("%d\n", ans); } return 0;}

  

 

转载于:https://www.cnblogs.com/PabloZeal/p/7071821.html

你可能感兴趣的文章
struts2总体介绍
查看>>
sping入门
查看>>
linux 查看服务器序列号(S/N)
查看>>
洛谷P3809 后缀排序【后缀数组】【模板】
查看>>
Java 内部类
查看>>
翻译的艺术 —— 无能为力的翻译,搞笑的音译
查看>>
统计学习导论 基于R应用——作业 3
查看>>
response.setHeader()的用法
查看>>
Java学习笔记
查看>>
Python 3基础教程32-正则
查看>>
linux、sql 常用的一些特殊符号
查看>>
无限级分类实现思路
查看>>
函数mod(a,m)
查看>>
学习MySQL我们应该知道哪些东西?
查看>>
java工程中的.classpathaaaaaaaaaaaaaaaa<转载>
查看>>
cordova打包app后发请求出现 Provisional headers are shown的问题
查看>>
PHP-SESSION深入理解
查看>>
.net面试题目51-100
查看>>
[转]Android 代码自动提示功能
查看>>
算法题:找出一个数组中相加值最大的连续序列元素
查看>>