题目描述
P3200 [HNOI2009]有趣的数列
样例输入:3 10
样例输出:5
题解
看样例猜做法
大概猜一猜 观察到答案是卡特兰数列
接下来我们看看为什么是这样。
首先化简题目
对于一个 \(2*n\) 的排列,我们要求:
奇数位置上的数递增
偶数位置上的数递增
奇偶相邻位置数递增奇怪的tip:偶奇相邻不用递增
首先假设我们把这 \(2n\) 个数一个个填进去 填到第 \(i\) 个
如果我们要填在偶数位 那么这个数必须比当前偶数大 也必须比上一位的奇数大
也就是说 这个数如果在偶数位上 需要比前 \(i-1\) 个数字都大
得出的结论是 如果这一位是偶数位 下标为 \(i\) 时的数字至少为 \(i\)
那么在奇数位上呢?
我们发现只要比前几个奇数大就可以了
也就是说 我们当前这个数一定可以填在第一个空白的奇数位上
所以题目变成了 对于长度为 \(2n\) 的序列
对于当前数 我们要么把他放在最大的偶数位上 要么把他放在最大的奇数位上
还要求奇数位的数字个数时刻大于等于偶数位
因为如果奇数位少一个 即偶数位多一个 无论下一个数往哪填 偶数位都没法大于当前的数
所以问题转化成了卡特兰数列