[HNOI 2009]

我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件:

(1)它是从1到2n共2n个整数的一个排列{ai};

(2)所有的奇数项满足a1<a3<…<a2n-1,所有的偶数项满足a2<a4<…<a2n

(3)任意相邻的两项a2i-1与a2i(1≤i≤n)满足奇数项小于偶数项,即:a2i-1<a2i

现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。

分析:

当然,可以打表找规律。

但是,如果学习了杨表的话,很显然,这就是一个 $2 \times n$ 的标准杨表,使用勾子公式,答案为 $\frac{(2n)!}{(n+1)!\cdot n!} = \frac{C_{2n}^n}{n+1}$,这也就是卡特兰数。

卡特兰数的扩展问题

首先,我们来看一个最简单的问题:

我在学校门口卖奶茶,奶茶一元一杯。今天下午开门的时候,我发现找零的钱忘带了。
这时候来了 2n 个人,其中 n 个人身上只有一张一元钱,另外 n 个人身上只有一张两元钱。我就让他们排成一队,然后用这 n 个人的一元钱来找给付两元的人。当然,排队的时候得保证每次来一个付两元的人的时候都有的找。
假设所有拿一元的人和拿两元的人都没有分别,我现在想知道,他们有多少种排队方式?

易知,答案即第 n 个Catalan数。

再看如下的升级问题,

升级1: 条件同上,但这时候来的人数为 3n ,其中 n 个人只有一张一元钱,n 个只有一张两元钱, n 个只有一张三元钱(假设题设的每种面值的钞票均存在)。我仍然让他们排成一队,只要有付两元的就用一元找,付三元的就用两元找。同样得保证每当需要找钱时有对应的钱可以找。求他们有多少种排队方式?

以及最终问题:

升级2: 条件同上,但这时候来的人数为 mn,其中拥有面值为一元至 m 元的人均有 n 个。每当支付 k (1 < k <= m-1)元时用 k-1 面值的钞票去找零。求合法排队方式数。

答案其实就是 n 行 m 列的杨表的种数,由勾子公式

$$\frac{(nm)!}{\prod_{k=0}^{m-1} (n+k)!/k!}$$

参考链接:如何求解这道卡特兰数的扩展问题——知乎

[HNOI2009] 有趣的数列——卡特兰数与杨表的更多相关文章

  1. [HNOI2009]有趣的数列 卡特兰数

    题面:[HNOI2009]有趣的数列 题解: 观察到题目其实就是要求从长为2n的序列中选n个放在集合a,剩下的放在集合b,使得集合a和集合b中可以一一对应的使a中的元素小于b. 2种想法(实质上是一样 ...

  2. BZOJ1485:[HNOI2009]有趣的数列(卡特兰数)

    Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...

  3. bzoj 1485 [HNOI2009]有趣的数列 卡特兰数

    把排好序的序列看成一对对括号,要把他们往原数列里塞,所以就是括号序合法方案数 即为卡特兰数 f(n)=Cn2nn+1 求的时候为避免除法,可以O(n)计算每个素数出现次数,最后乘起来,打完之后发现其实 ...

  4. 【BZOJ 1485】[HNOI2009]有趣的数列 卡特兰数

    这个题我是冲着卡特兰数来的所以就没有想到什么dp,当然也没有想到用卡特兰数的原因........... 你只要求出前几项就会发现是个卡特兰数,为什么呢:我们选择地时候要选择奇数位和偶数位,相邻(一对里 ...

  5. BZOJ1485: [HNOI2009]有趣的数列(卡特兰数+快速幂)

    题目链接 传送门 题面 思路 打表可以发现前六项分别为1,2,5,12,42,132,加上\(n=0\)时的1构成了卡特兰数的前几项. 看别人的题解说把每一个数扫一遍,奇数项当成入栈,偶数项当成出栈, ...

  6. luogu 3200 [HNOI2009]有趣的数列 卡特兰数+质因数分解

    打个表发现我们要求的就是卡特兰数的第 n 项,即 $\frac{C_{2n}^{n}}{n+1}$. 对组合数的阶乘展开,然后暴力分解质因子并开桶统计一下即可. code: #include < ...

  7. BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )

    打个表找一下规律可以发现...就是卡特兰数...卡特兰数可以用组合数计算.对于这道题,ans(n) = C(n, 2n) / (n+1) , 分解质因数去算就可以了... -------------- ...

  8. BZOJ 1485: [HNOI2009]有趣的数列 [Catalan数 质因子分解]

    1485: [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所 ...

  9. bzoj1485: [HNOI2009]有趣的数列(Catalan数)

    1485: [HNOI2009]有趣的数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2105  Solved: 1117[Submit][Stat ...

随机推荐

  1. LayUI笔记

    LayUI  经典模块化前端框架,低门槛开箱即用的前端 UI 解决方案.   其他UI框架:     Bootstrap,Element, EasyUI,LayUI 等等 LayUI使用  Layui ...

  2. 使用HSI配置系统时钟

    这里我就直接粘代码了.很简单.上节理解了 这也就能简单了. void HSI_SetSysClk( uint32_t RCC_PLLMul_x ) { __IO uint32_t HSIStatus ...

  3. goroutine基础

    程序1: package main import ( "fmt" "time" ) func test () { var i int for { fmt.Pri ...

  4. redis的安装---Linux

    1.下载https://redis.io/download wget http://download.redis.io/releases/redis-4.0.14.tar.gz tar -zxvf r ...

  5. MySQL5.7主从同步配置

    主从同步,将主服务器(master)上的数据复制到从服务器(slave). 应用场景 读写分离,提高查询访问性能,有效减少主数据库访问压力. 实时灾备,主数据库出现故障时,可快速切换到从数据库. 数据 ...

  6. Html5+Mui前端框架,开发记录(一)

    1.下载HBuilder X,地址:http://www.dcloud.io/hbuilderx.html,根据需求选择版本下载. Mui文档,地址:http://dev.dcloud.net.cn/ ...

  7. SQL 语句使用关键字错误

    异常为SQL Error: 1064, SQLState: 42000 时 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIG ...

  8. Python练习_数据类型_day5

    1. 1.作业 1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2&qu ...

  9. VBA比较运算符

    VBA支持的比较运算符如下所示. 假设变量A=10,变量B=20,则 - 运算符 描述 示例 = 检查两个操作数的值是否相等.如果是,那么条件是真. (A = B)结果为:False <> ...

  10. $.serializeArray()获取不到input的value值bug问题

    今天修改form表单,发现有好几个input值保存不上,上网搜索了一下是$.serializeArray()获取不到disabled的值.如果想要让input元素变为不可用,可以把input设为rea ...