杭电1082Matrix Chain Multiplication

2024-08-28 21:58

本文主要是介绍杭电1082Matrix Chain Multiplication,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

杭电1082Matrix Chain Multiplication
       这道题看oj上评论说很水,可是自己居然想了几个小时,看来对栈的的操作还是不够清晰熟练啊。总体思路就是把先把括号里面的表达式,然后再依次向外消掉括号。我的思路就是把(AB(AA(A)))(A(AB)),先运算成(#(#(#)))(#(#)),然后把这个压入数组中,然后遇到‘)’我们就对数组中的倒数第二个和倒数第三个元素进行判断,代码运行可能会出现(##),若判断的元素为#,则进行两个矩阵的相乘,得到新的矩阵压入到martix栈中,然后消除数组中的匹配的括号和中间的数。这样一次往后,直到栈中的元素只剩下一个,括号匹配完,字符串元素被全部判断。就可以得到总的运算次数。

ps:感觉我的方法不是很巧秒,欢迎大家给出意见
有什么看不懂的也欢迎大家给出意见
AC代码
#include<iostream>
#include<stack>
using namespace std;
struct martix
{int r;//hangint c;//lie
}st[200];
int main()
{int n;cin>>n;char str[10000];char c;// int c1,c2;for(int i=0;i<n;i++){cin>>c;cin>>st[c-'A'].r>>st[c-'A'].c;}while(cin>>str){int flag=0;//stack<char>oz;char oz[10000];int top=0;stack<martix>ys;martix temp;int len=strlen(str);int sum=0;for(int j=0;j<len;j++){if(str[j]=='('){oz[top++]='(';}else if(str[j]<='Z'&&str[j]>='A'){temp=st[str[j]-'A'];j++;while(str[j]<='z'&&str[j]>='A'){if(temp.c==st[str[j]-'A'].r){sum+=temp.c*temp.r*st[str[j]-'A'].c;temp.r=temp.r;temp.c=st[str[j]-'A'].c;j++;                        }else{flag=1;break;}}j--;if(flag){break;}ys.push(temp);oz[top++]='#';}else if(str[j]==')'){martix temp1,temp2;if(ys.size()>1&&top>=3&&(oz[top-3]=='#'||oz[top-2]=='#')){ top-=3;temp2=ys.top();ys.pop();temp1=ys.top();ys.pop();if(temp1.c==temp2.r){sum+=temp1.c*temp1.r*temp2.c;temp.r=temp1.r;temp.c=temp2.c; ys.push(temp);oz[top++]='#';}else{flag=1;break;}}}}if(flag)cout<<"error"<<endl;elsecout<<sum<<endl;           }return 0;
}


这篇关于杭电1082Matrix Chain Multiplication的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115999

相关文章

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

webservice系列3---chain

本节摘要:本节主要介绍webservice的高级特性chain的开发和配置 1.引言       之前在上webservice系列2---javabean&handler中讲了handler的使用,当有多个handler的时候,难道我们要一个一个的在wsdd文件中配置,然后一个一个的引入到需要的webservice中码?of course ,no。Apache组织已经替我们考虑到了这种需求,ch

设计模式 -- 职责链模式(Chain of Responsibility Pattern)

1 问题引出 1.1 学校 OA 系统的采购审批项目 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,有校长审批 ( 30000<x) 1.2 传统方式 传统方式是

Flink 原理与实现:Operator Chain原理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

Flink: 两个递归彻底搞懂operator chain

《2021年最新版大数据面试题全面开启更新》 operator chain是指将满足一定条件的operator 链在一起,放在同一个task里面执行,是Flink任务优化的一种方式,在同一个task里面的operator的数据传输变成函数调用关系,这种方式减少数据传输过程。常见的chain例如:source->map->filter,这样的任务链可以chain在一起,那么其内部是如何决定

struts2 result type= redirect redirectAction chain dispatcher等类型

struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.

2024杭电8

1004.cats 的重力拼图 题意: 有一个n*m的矩阵,给出最开始拼图的位置。 可以有四个选择,设置重力的方向,就是拼图会向一个方向竖直掉落到最底。 问任意操作次数后拼图走过的方格数量最大值。 题解: 首先已经在边缘的拼图,只能沿着边走一圈,再判断最开始可以朝哪个方向移动是最大值。 代码: #include<bits/stdc++.h>using namespace s

行为型设计模式-责任链(chain of responsibility)模式-python实现

设计模式汇总:查看 通俗示例 想象一下你在一个客服中心工作,当一个客户的问题提交给客服中心时,这个问题可能会被第一个可用的客服人员处理。如果这位客服人员无法解决问题,那么问题会被转发给更高级别的客服。这个过程可能会一直持续到问题被解决或者达到最高级别的支持。这种处理问题的方式就是一个责任链的例子。 通俗解释 责任链模式是一种行为型设计模式,它允许将请求沿着处理者链进行传递,直到有一个

Splay树(区间添加删除 | 区间翻转)——HDU 3487 Play with Chain

对应HDU题目:点击打开链接 Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4571    Accepted Submission(s): 1859 Problem Descript

2024杭电6

1001.造花(简单版) 题意: 菊花图:n-1个节点都连接同一节点的树。 给定一棵树,删掉一个节点和连向这个点的所有边,使剩下两个连通块都构成菊花图,问是否可以做到。 题解: 菊花图只有中心节点的度可以没有限制,其余节点的度都是1。 要删除一个节点,要求剩下两个连通块,那就只能删掉度为2的节点,剩下两个菊花图,菊花图最多一个度不是1的节点。 所以度不是1的节点数最多为5,如图。