uva442(Matrix Chain Multiplication)—线性表
来源:互联网 发布:c语言 sleep用法 编辑:程序博客网 时间:2024/05/24 06:42
Matrix Chain Multiplication
Suppose you have to evaluate an expression like A*B*C*D*E where A,B,C,D and E are matrices. Since matrix multiplication is associative, the order in which multiplications are performed is arbitrary. However, the number of elementary multiplications needed strongly depends on the evaluation order you choose.
For example, let A be a 50*10 matrix, B a 10*20 matrix and C a 20*5 matrix. There are two different strategies to compute A*B*C, namely (A*B)*C and A*(B*C).
The first one takes 15000 elementary multiplications, but the second one only 3500.
Your job is to write a program that determines the number of elementary multiplications needed for a given evaluation strategy.
Input Specification
Input consists of two parts: a list of matrices and a list of expressions.
The first line of the input file contains one integer n ( ), representing the number of matrices in the first part. The next n lines each contain one capital letter, specifying the name of the matrix, and two integers, specifying the number of rows and columns of the matrix.
The second part of the input file strictly adheres to the following syntax (given in EBNF):
SecondPart = Line { Line } <EOF>Line = Expression <CR>Expression = Matrix | "(" Expression Expression ")"Matrix = "A" | "B" | "C" | ... | "X" | "Y" | "Z"
Output Specification
For each expression found in the second part of the input file, print one line containing the word "error" if evaluation of the expression leads to an error due to non-matching matrices. Otherwise print one line containing the number of elementary multiplications needed to evaluate the expression in the way specified by the parentheses.
Sample Input
9A 50 10B 10 20C 20 5D 30 35E 35 15F 15 5G 5 10H 10 20I 20 25ABC(AA)(AB)(AC)(A(BC))((AB)C)(((((DE)F)G)H)I)(D(E(F(G(HI)))))((D(EF))((GH)I))
Sample Output
000error10000error350015000405004750015125
模拟矩阵链乘
#include<stdio.h>#include<string.h>int row[30],column[30];typedef struct{int row1;int column1;char c;}stack;stack myStack[30];int top=-1;int main(){int n;scanf("%d",&n);char c;while(n--){getchar();scanf("%c",&c);getchar();scanf("%d%d",&row[c-'A'],&column[c-'A']);}getchar();char t;int flag=0;int sum=0;while((t=getchar())!=EOF){if(t=='\n'){if(flag==2)printf("0\n");else if(flag==1){printf("error\n");}elseprintf("%d\n",sum);flag=0;top=-1;sum=0;}else{if(top==-1){if(t!='(')flag=2;else{top++;myStack[top].column1=0;myStack[top].row1=0;myStack[top].c=t;}}else{if(t=='('){top++;myStack[top].column1=0;myStack[top].row1=0;myStack[top].c=t;} else if(t==')'){int te=myStack[top].column1;int temp=myStack[top].column1;int ter=myStack[top].row1;int tec=myStack[top].column1;top--;while(myStack[top].c!='('){if(ter==myStack[top].column1){temp=temp*myStack[top].column1;ter=myStack[top].row1;tec=myStack[top].column1;}elseflag=1;top--;}myStack[top].c='[';myStack[top].row1=ter;myStack[top].column1=te;temp=temp*ter;sum=sum+temp;}else{top++;myStack[top].column1=column[t-'A'];myStack[top].row1=row[t-'A'];myStack[top].c=t;}}}}return 0;}
- uva442(Matrix Chain Multiplication)—线性表
- uva442 Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- uva442-Matrix Chain Multiplication
- UVA442 Matrix Chain Multiplication
- uva442 Matrix Chain Multiplication
- UVA442 - Matrix Chain Multiplication
- Matrix Chain Multiplication, UVa442
- UVa442 Matrix Chain Multiplication(栈)
- uva442 Matrix chain multiplication(数据结构)
- UVA442 Matrix Chain Multiplication(栈)
- UVA442 Matrix Chain Multiplication【DP】
- UVa442 Matrix Chain Multiplication(矩阵链乘)
- UVa442 Matrix Chain Multiplication(矩阵链乘)java实现
- UVA442 Matrix Chain Multiplication【stack】【栈】
- UVa442 Matrix Chain Multiplication(矩阵链乘)
- UVA442 Matrix Chain Multiplication 矩阵运算量计算(栈的简单应用)
- UVa442 例题6-3 矩阵链乘(Matrix Chain Multiplication)
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift
- Codeforces Round #259 (Div. 2) A-Little Pony and Crystal Mine
- leetcode Linked List Cycle II 单链表中的环问题集锦
- 【基础】使用Ansible连接AWS EC2
- Spring面向切面编程AOP
- uva442(Matrix Chain Multiplication)—线性表
- Android中数据存储之Shared Preference
- eclipse设置超时时间。Problems During Content Assist
- Leetcode Binary Tree Postorder Traversal(面试题推荐)
- Widevine *DRM and Keybox
- Elasticsearch相关图分享
- String s =new String()分析堆与栈
- /*C++任意输入一个整数,再把它的各位数字重新组合一个新的整数,使其值最大*/
- at android.widget.ListView.clearRecycledState(ListView.java:522)