COJ 0016 20603矩阵链乘

时间:2022-10-30 13:44:54

传送门:http://oj.cnuschool.org.cn/oj/home/solution.htm?solutionID=35454

20603矩阵链乘
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

输入n个矩阵的维度和一些矩阵链乘的表达式,输出乘法的次数。如果乘法无法进行,输出error。假定A是m*n矩阵,B是n*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.

此题数据有误,2015-4-25已修正。

输入
第一行包括一个正整数n,表示共有n个矩阵参与运算。
接下来的n行,每行包括三部分,第一部分是矩阵的名字(一个大写字母),第二部分和第三部分各是一个正整数,分别表示该矩阵的行数和列数,这三部分之间有一个空格分隔。
最后一行包括一个矩阵运算的合法字符串(只包括小括号和上述矩阵的名称)
输出
按题目描述中的要求输出
输入示例
3
A 50 10
B 10 20
C 20 5
A(BC)
输出示例
3500
其他说明
数据范围:表达式的长度不超过100个字符。所有数据运算不会超过int32范围。

栈处理简单表达式。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
const int maxn=+;
int n;
struct Matrix{
int a,b;
}M[maxn];
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;} if(x<) putchar('-'),x=-x;
int len=,buf[]; while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
int solve(Matrix& a,Matrix b){
int ans=-;
if(a.b==b.a){ans=a.a*b.b*b.a;a.b=b.b;}
return ans;
}
void init(){
n=read();
char ch;
for(int i=;i<=n;i++){
do ch=getchar(); while(isalpha(ch)!=);
int id=ch-'A';
M[id].a=read();
//write(M[id].a); putchar('\n');
M[id].b=read();
//write(M[id].b); putchar('\n');
}
return;
}
stack<Matrix> S;
void work(){
int ans=;
char s[maxn];scanf("%s",s);
int len=strlen(s);
for(int i=;i<len;i++){
if(isalpha(s[i])) S.push(M[s[i]-'A']);
else if(s[i]==')'){
Matrix t2=S.top();S.pop();
Matrix t1=S.top();S.pop();
int t=solve(t1,t2);
if(t<){puts("error");return;}
ans+=t;S.push(t1);
}
}
Matrix t2=S.top();S.pop();
Matrix t1=S.top();S.pop();
int t=solve(t1,t2);
if(t<){puts("error");return;}
ans+=t;
write(ans);
return;
}
void print(){
return;
}
int main(){
init();work();print();return ; }

COJ 0016 20603矩阵链乘的更多相关文章

  1. 【UVa-442】矩阵链乘——简单栈练习

    题目描述: 输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.如果乘法无法进行,输出error. Sample Input 9 A 50 10 B 10 20 C 20 5 D 30 35 E ...

  2. POJ1260 Pearls(dp&comma;矩阵链乘法)

    题目链接. 题目大意: 给定一个n,和两个序列a[i], p[i]. a[i] 表示需要购买 i品质 的数量,p[i] i 等级的价格. 1.每个品质都会有不同的价格,价格依据品质上升而上升 2.买一 ...

  3. Algorithm --&gt&semi; 矩阵链乘法

    动态规划--矩阵链乘法 1.矩阵乘法       Note:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义.一个m×r的矩阵A左乘一个r×n的矩阵B,会得到一个m×n的矩阵C. #include ...

  4. CODEVS 3546 矩阵链乘法

    http://codevs.cn/problem/3546/ 题目 给定有n个要相乘的矩阵构成的序列(链)<A1,A2,A3,.......,An>,要计算乘积A1A2.....An.一组 ...

  5. UVa 10003 切木棍(区间DP&plus;最优矩阵链乘)

    https://vjudge.net/problem/UVA-10003 题意: 有一根长度为L的棍子,还有n个切割点的位置.你的任务是在这些切割点的位置处把棍子切成n+1部分,使得总切割费用最小.每 ...

  6. &lpar;最大矩阵链乘&rpar;Matrix-chain product

    Matrix-chain product. The following are some instances. a)       <3, 5, 2, 1,10> b)       < ...

  7. POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP

    题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65 ...

  8. MCM(矩阵链乘法)

    这是<算法导论>动态规划中的一个问题.问题简述如下:我们在求解矩阵相乘时通常会有一个最优括号方案来对矩阵进行顺序相乘,这样会减少大量的计算时间. 我们知道矩阵A.B相乘,只能是当矩阵A的列 ...

  9. NYOJ 536 开心的mdd【矩阵链乘】

    题意:给出n个矩阵组成的序列,问最少的运算量 看的紫书: dp[i][j]表示从第i个矩阵到第j个矩阵最少的乘法次数 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j] ...

随机推荐

  1. 《火球——UML大战需求分析》&lpar;第1章 大话UML&rpar;——1&period;2 结构型的UML(Structure Diagram)

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  2. XMLHttpRequest基础知识

    XMLHttpRequest 发送请求的两个重要方法:open(method,url,async)——参数:请求方式.请求地址.请求同步/异步:send(string)——参数:使用POST方式时,填 ...

  3. Java-----判断是否为基本类型

    转载自:http://blog.csdn.net/hekewangzi/article/details/51969774

  4. 使用 ASP&period;NET Core MVC 创建 Web API(五)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  5. Spark线性回归实现优化

    import org.apache.log4j.{Level, Logger} import org.apache.spark.ml.feature.VectorAssembler import or ...

  6. Fiddler怎么可以抓取https的请求包

    对于https的协议是带有安全的功能,所有有一些的https的协议是无法抓到的,所以需要通过设置filler中来对,来使用filler的方式的来抓取到https的请求包,那么如何使用filler中抓取 ...

  7. &lbrack;LeetCode&rsqb; 276&period; Paint Fence&lowbar;Easy tag&colon; Dynamic Programming

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  8. &lt&semi;2&gt&semi;Cocos Creator文件结构

    1.文件结构 当新建HelloWorld项目后会自动出现以下文件夹结构 ProjectName(项目文件夹名称) |------assets |------library |------local | ...

  9. sass嵌套风格

    1.嵌套输出方式 nested Sass 提供了一种嵌套显示 CSS 文件的方式.例如 nav { ul { margin:; padding:; list-style: none; } li { d ...

  10. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...