N个数依次入栈,出栈顺序有多少种?
//模拟过程如下,dfs来填充入栈和出栈的标志
#include<iostream>
#include<cstring>
#include<cstdio>
#include<stack>
#define N 100
using namespace std; int a[N];
int p[*N];
int pre[*N];
int used[*N];
int index[*N];//如果a[i]==1,那么表示第index[i]个数入栈
int n;
int cnt;//记录多少个出栈的序列 int C(int n){
int ans=;
int m = *n;
int nn = n;
for(int i=; i<=n; ++i){
ans *= m--;
ans /= i;
}
return ans/(nn+);
} void solve(){
memset(pre, , sizeof(pre));
memset(used, , sizeof(used));
int prek = ;
for(int i=; i<=*n; ++i){
if(a[i] == ){
pre[i] = prek;
prek = i;
} else {
int ii = prek;
while(used[ii])
ii = pre[ii];
cout<<p[index[ii]]<<" ";//出栈
used[ii] = ;
pre[prek] = pre[ii];
}
}
cout<<endl;
} void solve1(){
stack<int>s;
int k=;
for(int i=; i<=*n; ++i){
if(a[i] == )
s.push(p[k++]);
else {
cout<<s.top()<<" ";
s.pop();
}
}
cout<<endl;
} void dfs(int k, int cnt0, int cnt1){
if(k>*n){
//solve();
solve1();
++cnt;
return ;
}
if(cnt1<n){//入栈
a[k] = ;
index[k] = cnt1+;//第几个数入栈
dfs(k+, cnt0, cnt1+);
}
if(cnt0<cnt1){//出栈
a[k] = ;
dfs(k+, cnt0+, cnt1);
}
} int main(){
cin>>n;
for(int i=; i<=n; ++i)
cin>>p[i];
dfs(, , );
cout<<endl<<"模拟个数:"<<cnt<<endl;
cout<<"公式个数:"<<C(n)<<endl;
return ;
}
N个数依次入栈,出栈顺序有多少种?的更多相关文章
- N个数依次入栈,出栈顺序有多少种
		
题目:N个数依次入栈,出栈顺序有多少种? 首先介绍一下卡特兰数:卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 2 ...
 - n个元素的入栈顺序有多少种出栈顺序?
		
问题:w1.w2.w3.w4.w5,5个元素将会按顺序入栈,求出栈顺序有多少种情况. 先写一下结论方便记忆: 1个元素:1种 2个元素:2种 3个元素:5种 4个元素:14种 5个元素:42种 简单的 ...
 - 【转】【数据结构】【有n个元素依次进栈,则出栈序列有多少种】
		
卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145 权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序 ...
 - bzoj 4034 [HAOI2015]树上操作  入栈出栈序+线段树 / 树剖  维护到根距离和
		
题目大意 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...
 - php栈的定义及入栈出栈的实现 算法
		
转自:php栈的定义及入栈出栈的实现 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去 ...
 - [置顶] 栈/入栈/出栈顺序(c语言)-linux
		
说明: 1.栈底为高地址,栈顶为低地址. 2.入栈顺序:从右到左. 解释1:栈在内存中的结构 [注:0x00 到 0x04之间间隔4个地址] 入栈:指针先指向0x10,从高地址向低地址方向填数值,最终 ...
 - Python模拟入栈出栈操作
		
目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...
 - 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历
		
直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...
 - 对Viewcontroller在UINavigationController中入栈出栈的一点点理解
		
转载自:http://blog.csdn.net/intheair100/article/details/41119073 wait_record_arr 在viewdidload里面被alloc,如 ...
 
随机推荐
- SQL基本语句汇总
			
语句:CREATE TABLE 作用:创建表格 格式:CREATE TABLE tableName (columnName1 columnDataType1, columnName2 columnDa ...
 - unison+inotify
			
hostnamectl --static set-hostname tCentos 1.下载文件到/usr/local/srcocamlunisoninotify-tools 2.安装inotify- ...
 - javascript 执行上下文的理解
			
首先,为什么某些函数以及变量在没有被声明以前就可以被使用,javascript引擎内部在执行代码以前到底做了些什么?这里,想信大家都会想到,变量声明提前这个概念: 但是,以下我要讲的是,声明提前的这个 ...
 - Logstash之multiline 插件
			
input { stdin { codec => multiline { pattern => "^\[" negate => true what => & ...
 - Des与3Des加密解密
			
/// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...
 - 更加精确的定时器:dispatch_source_t
			
在使用定时器时,我们经常使用NSTimer,但是由于NSTimer会受RunLoop影响,当RunLoop处理的任务很多时,就会导致NSTimer的精度降低,所以在一些对定时器精度要求很高的情况下,应 ...
 - Struts2中method={1}
			
<action name="Person_*" class="com.action.PersonAction" method="{1}" ...
 - LoadingView
			
// // LoadingView.h // 蓝桥播报 // // Created by 小小建 on 15/7/10. // Copyright (c) 2015年 蓝桥. All righ ...
 - TCP/IP,  WebSocket  和 MQTT
			
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.M ...
 - 性能分析工具-PerfView
			
Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...