AC日记——栈 洛谷 P1044
2017-03-02 22:05
274 查看
题目背景
栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。
栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。
题目描述
![](https://luogu.oss-cn-hangzhou.aliyuncs.com/upload/pic/18.png)
宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n。
现在可以进行两种操作,
1.将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的push操作)
将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的pop操作)
使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由1 2 3生成序列2 3 1的过程。
![](https://luogu.oss-cn-hangzhou.aliyuncs.com/upload/pic/19.png)
(原始状态如上图所示)
你的程序将对给定的n,计算并输出由操作数序列1,2,…,n经过操作可能得到的输出序列的总数。
输入输出格式
输入格式:输入文件只含一个整数n(1≤n≤18)
输出格式:
输出文件只有一行,即可能输出序列的总数目
输入输出样例
输入样例#1:3
输出样例#1:
5
思路:
卡特兰~~~
来,上代码:
#include <cstdio> #include <iostream> using namespace std; int n,dp[30]; int main() { cin>>n; dp[1]=1,dp[0]=1; for(int i=2;i<=n;i++) { dp[i]=dp[i-1]*(4*i-2.0)/(i+1.0); } cout<<dp ; return 0; }
相关文章推荐
- AC日记——斐波那契数列(升级版) 洛谷 P2626
- AC日记——妖梦拼木棒 洛谷 P3799
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
- AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937
- AC日记——[SDOI2011]染色 洛谷 P2486
- AC日记——小行星 洛谷 P2711
- AC日记——砝码称重 洛谷 P2347
- AC日记——[USACO1.5]数字三角形 Number Triangles 洛谷 P1216
- AC日记——封锁阳光大学 洛谷 P1330
- AC日记——魔方 洛谷 P2007
- AC日记——逆序对 洛谷 P1908
- AC日记——最大数 洛谷 P1198 [JSOI2008]
- AC日记——5倍经验日 洛谷 P1802
- AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
- AC日记——挤牛奶 洛谷 P1204
- AC日记——[USACO08DEC]干草出售Hay For Sale 洛谷 P2925
- AC日记——L国的战斗之间谍 洛谷 P1916
- AC日记——城市 洛谷 P1401
- AC日记——Car的旅行路线 洛谷 P1027
- AC日记——[USACO5.4]奶牛的电信Telecowmunication 洛谷 P1345