N个数依次入栈,出栈顺序有多少种?
//模拟过程如下,dfs来填充入栈和出栈的标志#include<iostream> #include<cstring> #include<cstdio> #include<stack> #define N 100 using namespace std;int a[N]; int p[2*N]; int pre[2*N]; int used[2*N]; int index[2*N];//如果a[i]==1,那么表示第index[i]个数入栈 int n; int cnt;//记录多少个出栈的序列 int C(int n){int ans=1;int m = 2*n;int nn = n;for(int i=1; i<=n; ++i){ans *= m--;ans /= i;}return ans/(nn+1); }void solve(){memset(pre, 0, sizeof(pre));memset(used, 0, sizeof(used));int prek = 0;for(int i=1; i<=2*n; ++i){if(a[i] == 1){pre[i] = prek;prek = i;} else {int ii = prek;while(used[ii]) ii = pre[ii];cout<<p[index[ii]]<<" ";//出栈 used[ii] = 1;pre[prek] = pre[ii];}}cout<<endl; }void solve1(){stack<int>s;int k=1;for(int i=1; i<=2*n; ++i){if(a[i] == 1)s.push(p[k++]);else {cout<<s.top()<<" ";s.pop();}}cout<<endl; }void dfs(int k, int cnt0, int cnt1){if(k>2*n){//solve(); solve1(); ++cnt; return ;}if(cnt1<n){//入栈 a[k] = 1;index[k] = cnt1+1;//第几个数入栈 dfs(k+1, cnt0, cnt1+1);}if(cnt0<cnt1){//出栈 a[k] = 0;dfs(k+1, cnt0+1, cnt1);} }int main(){cin>>n;for(int i=1; i<=n; ++i) cin>>p[i];dfs(1, 0, 0);cout<<endl<<"模拟个数:"<<cnt<<endl;cout<<"公式个数:"<<C(n)<<endl;return 0; }
转载于:https://www.cnblogs.com/hujunzheng/p/4845354.html
N个数依次入栈,出栈顺序有多少种?相关推荐
- 2023新华为OD机试题 - 入栈出栈(JavaScript) | 刷完必过
华为Od必看博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 华为OD机试 全流程解析+经验分享,题型分 ...
- PLC实现入栈出栈功能(SCL)
PLC实现入栈出栈功能(SCL 引言 功能需求 准备工作 入栈 PLC程序 出栈 PLC程序 触摸屏画面程序 源程序 引言 之前用梯形图实现了PLC入栈出栈功能,这次使用SCL来实现此功能. 功能需求 ...
- Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)
入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...
- 【数据结构】栈详解——压栈/入栈 | 弹栈/出栈 | 获取栈顶元素
栈 顺序栈 栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈, ...
- PLC实现入栈出栈功能
入栈出栈 实现需求 准备工作 入栈 PLC程序 仿真效果 出栈 PLC程序 仿真效果 源程序 实现需求 使用西门子PLC实现入栈出栈的功能,出入栈顺序为先入先出 准备工作 创建FC块.入栈和出栈两个F ...
- 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...
- 数据结构 - 栈(链表实现栈的入栈出栈)
学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...
- Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...
- 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )
文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...
- 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】
刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高. 华为 OD 清单查看地址:https://blog.csdn.net/hihell/categor ...
最新文章
- js 连接mysql_关于Node.js 链接mysql超时处理(默认8小时)
- 论文精读——CenterNet :Objects as Points
- 2017-07-02 前端日报
- python调用键盘_使用 Python 控制自己的电脑和键盘是一种什么样的体验?
- 码云提交时报错git 报错 fatal: unable to auto-detect email address (got 'Administrator@PC-20180504MMDH.(none)'
- 墙面有几种装修方法_卧室装修静音环保攻略,赶紧收藏起
- 图像处理小tip——中值滤波的多种实现(包括快速中值滤波算法)
- matlab 均匀设计编程,均匀设计均匀设计表--方开泰.doc
- 怎样进入金蝶服务器修改参数,金蝶KIS专业版的系统参数在哪里设置
- html5京东页面布局,京东移动端页面布局(一)
- DRM in Android
- 2021-07-16思考-资本源于贪婪(与人性抗争)
- php yar call,php yar扩展在laravel中的使用
- scdl matlab,5自由度移动机器人的建模与仿真-硕士论文
- POE方案之SI3402-B
- 解决:电脑屏幕每隔几分钟就闪一次(瞬间黑屏一次),鼠标指针伴随着加载的状态(漏斗或者转圈),然后瞬间恢复正常
- Java创建泛型数组的一种方法
- B端产品设计:价值主张与需求对应的价值
- 乱贴小广告违法 有人仍一意孤行
- u-boot.lds文件诠释
热门文章
- java客户端程序用什么自动化测试_五大Java自动化测试框架
- uni-app单个页面的生命周期函数
- 定时任务的并发_03
- html、css、js、react、vue 文字一行一行显示出来
- JavaScript-数据类型
- 运行Java程序时 Tomcat出错 显示端口被占用
- appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...
- 记录——oracle数据库备份
- 在列表前方插入一个数据_通俗易懂的Redis数据结构基础教程
- 怎样清除手机中的html文件夹,怎么彻底清除手机APP卸载后的残留文件夹 能删与不能删文件名...