题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=383
题目类型: 数据结构, 链表
样例输入:
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
题目大意:
给出一系列的矩阵,给他们取名A ,B…… 以及它们的行数和列数。给完后,给出一系列的表达式,然后要求求出按这些表达式进行计算,会有多少次乘法步骤。
解体思路:
这题和括号匹配那题很像。关键的步骤是计算矩阵乘法次数的这个过程。
#include<cstdio>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<stack>
using namespace std;
int sum,n;
int mat[30][2];
int arr[30],prev[30], next[30];
char str[1000];
void solve(){
// 如过只有一个矩阵,那么直接输出结果0
if(strlen(str)==1 && isupper(str[0])){
printf("0\n");
}
else{
char copyMat[30][2];
int i,j;
// 复制一个数组进行操作。 因为后面的操作需要对这些矩阵进行修改
for(i=0; i<n; ++i){
copyMat[i][0] = mat[i][0];
copyMat[i][1] = mat[i][1];
}
sum=0;
stack<char>st;
for(i=0; i<strlen(str); ++i){
if(str[i]=='(' || isupper(str[i]))
st.push(str[i]);
else if(str[i]==')'){
stack<char>temp;
// 当碰到‘)’时,把栈中的矩阵全都取出来进行计算
while(isupper(st.top())){
temp.push(st.top());
st.pop();
}
// 把'('也弹出
st.pop();
char ex;
// 取出第一个矩阵(在原表达式中是最左边的一个)
if(!temp.empty()){
ex=temp.top();
temp.pop();
}
while(!temp.empty()){
char multi = temp.top();
temp.pop();
// 如果左边矩阵的列数和右边矩阵的函数不同,则直接输出 error
if(copyMat[ex-'A'][1] != copyMat[multi-'A'][0]){
printf("error\n");
return ;
}
// 计算相乘次数,加上
sum += copyMat[ex-'A'][0]*copyMat[multi-'A'][0]*copyMat[multi-'A'][1];
// 相乘后得到一个新矩阵,更新尺寸
copyMat[ex-'A'][1] = copyMat[multi-'A'][1];
}
st.push(ex);
}
}
printf("%d\n",sum);
}
}
int main()
{
freopen("input.txt", "r",stdin);
char ch;
int i, j;
scanf("%d%*c", &n);
for(i=0; i<n; ++i){
scanf("%c %d %d%*c",&ch,&mat[i][0],&mat[i][1]);
}
while(gets(str)){
solve();
}
return 0;
}
—— 生命的意义,在于赋予它意义。
分享到:
相关推荐
在三值光学计算机上进行的矢量乘矩阵运算,金翊,王先超,本文报道一种进行矢量乘矩阵运算的光学方法。这个方法在一种新颖的光学计算结构--三值光学计算机(ternary optical computer,TOC)上,使�
Cook-Toom Algorithm and Modified Cook-Toom Algorithm Winograd Algorithm and Modified Winograd Algorithm Iterated Convolution Cyclic Convolution Design of Fast Convolution Algorithm by Inspection
Source Code for 2009 Supercomputing Paper Implementing Sparse Matrix-Vector Multiplication on Throughput-Oriented Processors
LVDS(Low-Voltage Differential Signaling,低压差分信号)是一种高带宽的数字信号传输技术,广泛应用于高速数据通信领域,特别是在FPGA(现场可编程门阵列)设计中,用于实现高速串行数据传输。本文主要介绍Xilinx...
标题"matrix-multiplication-master_matrix_"表明这是一个关于矩阵乘法的项目,可能包含优化或改进的算法实现。描述中提到的"see laochanlam/matrix-multiplication in github"暗示了这个项目是GitHub上的开源代码库...
`parallel-matrix-multiplication-master`这个压缩包可能包含以下内容: 1. `index.html` - 主页,用于展示并行矩阵乘法的界面。 2. `script.js` - JavaScript代码,包括创建和管理Web Workers,以及处理矩阵乘法的...
矩阵链乘法 该程序找到了最有效的乘法矩阵的方法。 该程序实现的复杂度为O(n ^ 3),并用O(n)括住最终输出 输入规范:第一行包含n,下一行包含a0,...,an,以空格分隔。 假定所有数字都是正数且适合int且n最多为...
1. **数据结构**:定义表示矩阵的类,包含二维数组存储元素以及必要的方法(如获取/设置元素、计算维度等)。 2. **输入处理**:读取用户或文件提供的矩阵数据,将其存储到矩阵对象中。 3. **矩阵运算**:实现矩阵...
在"Matrix-Vector-Multiplication-master"这个压缩包中,源代码可能包含以下几个关键部分: 1. 数据输入格式:为了适应MapReduce,矩阵和向量的数据需要转换成适合分布式计算的格式,如CSV或自定义的二进制格式。 ...
Matrix Chain Multiplication is perhaps the quintessential example of dynamic programming. The problem can be stated as follows: given a chain <A1, A2,..., An> of n matrices, where for i = 1, 2,....
用法 $ npm install$ NODE_PATH=node_modules node index.js [DONE] RESET DATABASE[ '[DONE] generate test data: leftMatrix: ', [ { row: 0, column: 0, value: 0, _id: 54a0219b5c38d4e4722b9c8f }, { row: 0, ...
在计算机科学中,稀疏矩阵(Sparse Matrix)是一种表示大量元素为零的矩阵的数据结构。当处理具有大量非零元素的矩阵时,直接使用常规的二维数组存储方式可能会浪费大量空间,因为大部分空间被零占据。为了高效地...
标题"matrix multiplication_matrix_"暗示了我们将会探讨的内容——高效的矩阵乘法算法和技术。 矩阵乘法是线性代数的基本运算,涉及两个矩阵A和B,当它们的维度兼容时(即A的列数等于B的行数),可以进行乘法操作...
题目描述: 输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数。如果乘法无法进行,输出error。假定A是m*n矩阵,B是n*p矩阵,那么AB是m*p矩阵,乘法次数为m*n*p。如果A的列数和B的行数不同,则乘法无法进行。...
在这个名为"Synchronous-100x100-Matrix-Multiplication-using-Multiple-Threads"的项目中,开发者实现了一个程序,目标是高效地通过多线程技术来完成两个100x100的大型矩阵相乘的任务。在多线程编程中,这种策略...
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 > name; int k = name[0] - 'A'; cin >> m[k].a >> m[k].b; } ...
该项目暗示了分布式计算体系结构可以执行矩阵乘法。 该项目的主要依存关系是ZeroMQ。 该程序在IPC机制上运行。 运行程序 请按照以下步骤运行代码 启动服务器: 服务器负责接收来自客户端的请求; 分配任务并将其...
c++ C++_leetcode题解之668_Kth_Smallest_Number_in_Multiplication_Table
本题关注的是一个特定的问题——矩阵链乘法(Matrix Chain Multiplication),它是一个典型的动态规划应用实例。 矩阵链乘法问题是这样的:给定一系列矩阵,任务是找到一种最佳的矩阵乘法顺序,使得乘法运算的总...
矩阵向量乘法使用MPI 在该代码中,矩阵和向量由具有等级0的处理器从文件中读取,矩阵的行分布在通信器中的各个处理器之间,等级0的处理器使用mpi_bcast集体调用将向量发送给所有其他处理器。 因此,每个处理器都执行...