计数杂题选做(1)

为 CSP-S 和 NOIP 做准备,所以做的题难度并不是非常大,通常以绿蓝题为主。

一:P1287 盒子与球

一眼第二类斯特林数。

递推式 C n k = C n − 1 k − 1 + k × C n − 1 k C_{n}^{k}=C_{n-1}^{k-1}+k\times C_{n-1}^{k} Cnk=Cn1k1+k×Cn1k。考虑前 n − 1 n-1 n1 个球放好,现在放第 n n n 个球,是新放一个盒子还是放原来盒子。这种思路在许多组合排列相关的题中能用到,下一题就是例子。

注意此题盒子也是不相同的,还要再乘 r r r 的阶乘。

二:P2401 不等数列

f i , j f_{i,j} fi,j 表示 1 1 1 i i i 的排列,小于号数为 j j j 的方案数。

仍然考虑递推,假设加入了第 i i i 个数,它比原来的数都大。分类讨论它插在最前面、最后面、两数中间且原来符号为小于号、大于号。会发现小于号数量只会不变或加 1 1 1。然后就得到 f i , j = f i − 1 , j − 1 × ( i − j ) + f i − 1 , j × ( j + 1 ) f_{i,j}=f_{i-1,j-1}\times (i-j)+f_{i-1,j}\times (j+1) fi,j=fi1,j1×(ij)+fi1,j×(j+1)

三:P2606 [ZJOI2010] 排列计数

观察下标的关系,会发现实际就是求以 1 1 1 为根的小根堆个数,这样的计数也很经典。考虑计算 f i f_i fi,表示有 i i i 个节点的小根堆个数,容易发现只要确定左儿子数量 l l l,那么就可以算出 f i f_i fi= C i − 1 l × f l × f r C_{i-1}^{l}\times f_l\times f_r Ci1l×fl×fr。表示除去根外的剩下节点中选一部分当左儿子,剩下为右儿子。而左右儿子互不影响,乘法原理。

注意这道题组合数的求解要用 Lucas 定理。

四:P5689 [CSP-S2019 江西] 多叉堆

这道题和上一道题有些相似。

维护树根用并查集就行了,记录一个树根的 s z sz sz

再考虑合并,将 x x x 并到 y y y,令 f y ← f y × f x × C s z y − 1 s z x f_y\gets f_y\times f_x\times C_{sz_y-1}^{sz_x} fyfy×fx×Cszy1szx,原理与上题一样。

五:P5684 [CSP-J2019 江西] 非回文串

考虑 dp,发现求非回文串很难求,正难则反,发现求回文串的话就简易许多了。

总数量为 n ! n! n!,对于回文串,我们只考虑左右中一侧,设每个字符出现次数 c n t i cnt_i cnti 为偶数,那么我们在一侧必要放 c n t i 2 \frac{cnt_i}{2} 2cnti 个,由于字符有下标关系,所以用排列,放字符数为 A c n t i c n t i 2 A_{cnt_i}^{\frac{cnt_i}{2}} Acnti2cnti,然后 n 2 \frac{n}{2} 2n 个位置,也可以任意排列,所以最终答案为 n ! − n 2 ! × A c n t i c n t i 2 n!-\frac{n}{2}!\times A_{cnt_i}^{\frac{cnt_i}{2}} n!2n!×Acnti2cnti

六:P6146 [USACO20FEB] Help Yourself G

2 n 2^n 2n 个集合,肯定不能全部枚举,对于这种很常见的解决方法时考虑一个元素加入对全部方案的贡献。

我们先将线段按左端点从小到大排序,记 f i f_i fi 为前 i i i 条线段的总方案数。对于新的一条线段,不加入则为 f i − 1 f_{i-1} fi1,加入了,之前与它相交的方案数仍为 f i − 1 f_{i-1} fi1,若不与它相交,设数量为 j j j,则会产生 2 j × 1 2^j\times 1 2j×1 的贡献。

最后转移方程就出来了。 j j j 可以考虑前缀和计算,反正数据范围也不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值