/ Vijos / 题库 /

时间限制:1秒  内存限制:256M


【题目描述】

  栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。

  栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。

  栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。
说明
  宁宁考虑的是这样一个问题:一个操作数序列,从 \(1,2,... n\)(图示为 1 到 3 的情况),栈A 的深度大于 \(n\)。现在可以进行两种操作:
  1.将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的 push 操作)
  2. 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的 pop 操作)
  使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由 1 2 3 生成序列 2 3 1 的过程。(原始状态如上图所示)
说明
  你的程序将对给定的 \(n\),计算并输出由操作数序列 \(1,2,…,n\) 经过操作可能得到的输出序列的总数。

【输入格式】

  只含一个整数 \(n\)。

【输出格式】

  只有一行,即可能输出序列的总数目。

【输入输出样例】

 Input

3

 Output

5

【数据限制】

  对于 \(100\%\) 的数据,\(1≤n≤18\)

【来源】

  Mr.he

信息

ID
2186
难度
10
分类
数据结构 | 递推 | 动态规划 | 搜索 点击显示
标签
递交数
1
已通过
0
通过率
0%
被复制
1
上传者