数论-哈哈哈好快乐

数学

[NOI2018] 冒泡排序

问题转化,反证法可以得到,合法排列的充要条件是不存在编号递增的三个数,满足 \(a>b>c\)

对于合法排列,从左往右讨论每个位置,如果大于前缀 \(max\) ,就放到 \(A\) 序列,否则放到 \(B\) ,则 \(A,B\) 都是上升序列。

\(f(i,j)\) 表示前 \(i\) 个位置放完,最大的数是 \(p\) ,没有放的数中 \(<p\) 的有 \(j\) 个的方案数。

\(i+1\) 位置放没有放的最小的数, \(f(i,j)\rightarrow f(i+1,j-1)\)

\(i+1\) 位置放没有放的,比 \(p\) 大的数中,第 \(k\) 小的数, \(f(i,j)\rightarrow f(i+1,j+k-1)\)

有一些限制,比如 \(i+j \le n\)

如果没有字典序限制,考虑从 \((0,0)\)\((n,0)\) ,每次 \(x+1\)\(y+k,k\ge -1\) ,方案数就是 \(f(n,0)\)

用括号序列一一对应这个过程, \(f(n,0)=(^{2n}_{n})-(^{2n}_{n+1})\)

考虑字典序的限制,类似数位 DP ,讨论前 \(i-1\) 位放和题目给出的排列相同的数,第 \(i\) 位比其大 \(1\) ,之后随意填数的方案数,加起来就是答案。

这时候其实是从 \((x,y)\)\((n,0)\) ,在括号序列上的意义就是,已经有 \(t\) 个左括号在左边固定了,还有 \(m\) 个右括号以及 \(m-t\) 个左括号要填。

方案数 \((^{2m-t}_{m})-(^{2m-t}_{m+1})\) 。推导方式类似上面 \(f(n,0)\) 那个式子。

\(f(n,0)\) 就是 Catalan 数,表示成两个组合数的差,考虑随意填,再减去非法方案数。

非法方案的理解方式我知道的有两种。

一种是把起点从 \((0,0)\) 改为 \((0,-2)\) ,再把一部分路径沿 \(y=-1\) 对称。

还有一种是在第一次出现非法,即 \([]] \cdots\) 的情况时,交换左右括号,得到 \(][[ \cdots\) ,这样 \([\) 的数量 \(+1\)

题外话,如果把 DP 状态改为 \(>p\) 的数,会得到一个可以用后缀和优化的方程,再搞和式。而如果把第二维 \(j\) 反过来,就是说变成 \(n-i\) ,似乎前缀和 \(g\) 可以推得 \(g(0,0)=1,g(i,j)=g(i-1,j)+g(i,j-1)=(^{i+j-1}_{j-1})\) (加一减一我可能记错了),然后再怎么怎么搞……

这题网上做法特别多,题解都写得极其抽象,太……妙……了。

[LOJ 6363] 地底蔷薇

首先,吃一发 [BZOJ 3456] 城市规划\(n\) 个有编号点的无向连通简单图数量。

吃饱了,再见。

苹果树

一篇好题解

猜你喜欢

转载自www.cnblogs.com/ghcred/p/10519509.html