P3200 [HNOI2009]有趣的数列

题目描述

P3200 [HNOI2009]有趣的数列
样例输入:3 10
样例输出:5

题解

看样例猜做法
大概猜一猜 观察到答案是卡特兰数列
接下来我们看看为什么是这样。

首先化简题目
对于一个 (2*n) 的排列,我们要求:
奇数位置上的数递增
偶数位置上的数递增
奇偶相邻位置数递增
奇怪的tip:偶奇相邻不用递增

首先假设我们把这 (2n) 个数一个个填进去 填到第 (i)
如果我们要填在偶数位 那么这个数必须比当前偶数大 也必须比上一位的奇数大
也就是说 这个数如果在偶数位上 需要比前 (i-1) 个数字都大
得出的结论是 如果这一位是偶数位 下标为 (i) 时的数字至少为 (i)

那么在奇数位上呢?
我们发现只要比前几个奇数大就可以了
也就是说 我们当前这个数一定可以填在第一个空白的奇数位上

所以题目变成了 对于长度为 (2n) 的序列
对于当前数 我们要么把他放在最大的偶数位上 要么把他放在最大的奇数位上
还要求奇数位的数字个数时刻大于等于偶数位
因为如果奇数位少一个 即偶数位多一个 无论下一个数往哪填 偶数位都没法大于当前的数

所以问题转化成了卡特兰数列

原文地址:https://www.cnblogs.com/lzy-blog/p/15350272.html