[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. C5. Spring 服务的注册与发现(Spring Cloud Eureka)

    [概述] Eureka 作为 Spring Cloud 分布式解决方案中重要的一环,实现了服务的注册与发现等功能.Eureka 包括 Eureka Server 和 Eureka Client,具体的 ...

  2. [官网]PG12发布了

    PostgreSQL 12 Press Kit https://www.postgresql.org/about/press/presskit12/zh/#original_release Conte ...

  3. Sql 第一行某列减第二行某列

    --1. 将结果插入临时表SELECT *INTO xxx FROM( SELECT TOP 1 a.FQTY,a.fseq FROM T_SAL_ORDERENTRY as a WHERE FQTY ...

  4. 利用Python进行数据分析_Numpy_基础_3

    通用函数:快速的元素级数组函数 通用函数,是指对数组中的数据执行元素级运算的函数:接受一个或多个标量值,并产生一个或多个标量值. sqrt 求平方根 np.sqrt(arr) exp 计算各元素指数 ...

  5. 【规律】Cunning Friends

    Cunning Friends 题目描述 Anthony and his friends Ben and Chris decided to play a game. They have N piles ...

  6. SAS学习笔记13 SAS数据清洗和加工(续)

    查找缺失值 cha[*]和num[*]是建立数组cha和num,但不指定数组中的元素数 自动变量_character_表示数据集中的所有字符型变量 自动变量_numeric_表示数据集中的所有数值型变 ...

  7. 部署java应用的几种方式

    J2EE应用 该应用根目录下有好多文件夹和以jsp结尾的文件 部署时,需要在tomcat的conf目录下的server.xml文件中添加上<Context path="/" ...

  8. Unity性能优化-对象池

    1.对象池Object Pool的原理: 有些GameObject是在游戏中需要频繁生成并销毁的(比如射击游戏中的子弹),以前的常规做法是:Instantiate不断生成预设件Prefab,然后采用碰 ...

  9. 日语单词N3_N4_N5

    单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. 挨拶(あいさつ):① 寒暄 ...

  10. day12-python之深灰魔法

    #######################################灰魔法: list类中提供的方法   列表####################################### ...