SS-组合记数

组合计数

Problem 0 - P4463

首先,“互不相同”这个条件十分难处理,所以考虑令 a 单调递增,最后再乘上一个 n! 的系数。

fn,k 表示满足单调递增的 a,且长度为 n,值域为 [1,k] 的乘积和。

考虑 an 是否取到上界 k,可以得出转移式:fn,k=fn,k1+fn1,k1×k

然而这样子转移复杂度过高,因此考虑优化。可以观察得出,fn,k 肯定是一个多项式。令 g(n)fn,k 的多项式的项数,则:

fn,kfn,k1=fn1,k1×kg(n)1=g(n1)+1

可得 g(n)=2n。因此,我们只需要找到 2n+1 个点,然后就可以拉插求出 fn,k

Problem 1 - P4484

首先显然有一个计算最长上升子序列的 DP:dpi=max(maxaj<aidpj+1,dpi1)

接下来可以由常见套路,从小到大插入数字。

考虑插入 n 之后的变化。由前面的 DP,我们假如在位置 k 插入 n,只会使后面的 DP 值变成 max(dpk1+1,dpi)$。

但是,LIS 的 DP 值肯定满足差分数组在 [0,1] 间,所以我们考虑状压,将差分数组转化成一个 int 值。

重新回顾前面插入 n 的过程。可以发现,我们所做的就是将差分数组第一个为 1 的数变成 0。

剩下的打表即可。

Problem 2 - ARC138E

首先,让所有满足 ai0 的点 iai1 建边。这样子,我们会建出一个点为 0n+1 的图,图为若干个链组成。

为了防止记重,我们对于每个链只计算一次。则最后的答案肯定形如一个 (L1,L2,,Lk,Rk,,R2,R1),且满足 Ri>LiRiLi 有边。

接下来,我们枚举 Li 左边的链的大小 xRi 右边的链的大小 y,则这部分的答案为 (n+1x+y){kx}{ky}i{      in+1xy},其中 {ba} 是第二类斯特林数。

最后对于所有 x,y 求和即可。

Problem 3 - P5400

看到”恰好“,首先往容斥想。

定义 fi 为至少有 i 个的概率。则总答案为 i=kmin(n,m,l)(ik)(1)ikfi

接下来计算 fi。显然,对于 i 个极大的位置 (xi,yi,zi),满足所有 xi,yi,zi 互异。而对于任意的 (xi,yi,zi),它的答案都是不变的,所以我们先让 fi 乘上一个 Ani×Ami×Ali 的系数。对于第 j 个位置,它影响到的位置数量是 nml(nj)×(mj)×(lj) 的,且每个位置作为极大位置的概率相同,因此概率是总情况数的倒数:1nml(nj)(mj)(lj)

最后把式子整合一下即可。

Problem 4 - AGC064D

考虑怎样的答案串可以被表示出来。设我们要检查的字符串为 t,然后逆序遍历 s

  • 如果 siB,那么我们需要在 t 中找到任意一个满足末尾为 B 的前缀,然后把这个前缀移到前面。
  • 否则,我们在 t 需要找到任意一个以 R 开头的字符串,并将最前面的 R 删去;如果没有,则 t 不可以是最后的结果。

这个正确性是显然的,因为我们实际上就在倒序处理所有操作。

但是,这个检查的方法有许多”任意一个”,所以没办法详细的刻画一个串能否被表示。所以考虑改进上面的方法。

  • 对于第二种操作,显然取任意一个位置都是一样的。
  • 对于第一种操作,我们需要考虑后续的操作二。因为后面的操作相当于是说在删去一串 R,所以我们需要让删去后前缀 R 的总和最大即可。

接下来,就可以确定怎样的答案串可以被表示了。

  • s 翻转。
  • siB 前出现了 aiB
  • t 中的 Bt 划分成了长度分别为 b1,b2,,bk 的极长 R 串。
  • b2bk 降序排序。
  • t aii=1tbi(需要注意的是,ai 本身就是前缀和)。

接下来考虑 DP。我们将降序排序转化成单调不增,最后再乘上组合系数。令 fi,j,k 表示最小值为 i,当前选了 j 个数,和为 k 的方案数。

枚举当前选了多少个,即可转移。特别需要注意的是边界问题。

Problem 5 - CF1942G

首先,转化题目。我们将题面表示成:

  • 你有一个初始为 5 的变量 cnta 张类型 A 的牌,b 张类型 B,c 张类型 C,5 张特殊牌。
  • 类型 A 和特殊牌会使 cntcnt1,类型 B 没有影响,类型 C 会让 cntcnt+1
  • 你持续操作,直到 cnt=0 或取完所有牌,问你停止操作后取完所有特殊牌的方案。

首先,由于类型 B 对答案没有影响,所以我们最后只需要乘上一个 (a+b+c+5b) 的系数。然而我们最后求得是概率,所以需要除以 (a+b+c+5a,b,c,5) 的总方案数。可以发现,B 类型对答案的贡献被抵消了,所以我们只需要算类型 A,类型 C,还有特殊牌。

特殊牌和类型 A 对 cnt 的影响是固定的,所以我们可以先把他们都归为一类,然后最后乘上 (a+55) 即可。

接下来,分最后是 cnt=0 还是取完所有牌两种情况来考虑。而这两种情况是类似的,因此只考虑一类。

对于 cnt=0,我们枚举结束时取了多少张类型 C 的牌,设为 i。接下来,就是一个经典的格路计数问题,可以用组合计数 + 容斥。

最后,由于后面可以任意排列,所以我们再乘上 (a+b2iai) 即可。

Problem 6 - CF1874F

首先考虑容斥。我们钦定有 x 个区间满足 [l,r]lr 的排列,则我们要乘上 (1)x

但是题目条件还是很难处理。所以考虑挖掘性质。我们发现,如果 [l1,r1][l2,r2] 满足 l1l2r1r2,那么 [l2,r1],[l1,l2],[r1,r2] 也满足要求。

所以说,如果两个区间有交,他们可以被拆分成若干个不交区间。因此,我们计数时只需要考虑不交或包含的区间即可。

因此区间的关系类似一棵树,可以考虑 DP。令 fl,r 为根节点是 [l,r] 的方案数,gl,r,x[l,r] 区间内有 x 个位置没有覆盖的方案数。

接下来的 DP 是简单的。

Problem 7 - P8478

不会,不想补。

Problem 8 - P4931

首先,考虑 k 对和睦的情侣的数量。

总的方案是 (nk)2k!2k

接下来,剩下 nk 对情侣不能是和睦的,可以用类似错排的方法。

fii 对情侣不和睦的方案数。

首先,坐在最前面的两个人不能是情侣,所以有 2n×(2n2)=4n×(n1) 种方案。

然后,记 ipi 是情侣,坐在最前面的两个人是 xy,则我们分讨一下 pxpy 是否坐在一起。

  • 坐在一起:2×(n1)×fn2,其中 2 表示 pxpy 可以交换。
  • 不坐在一起:fn1

也就是说,fi=4n×(n1)×(2(n1)×fn2+fn1)

最后用 fnk 乘上前面的东西即可。

Problem 9 - QOJ5357

考虑如何合并答案。设我们现在合并 (u,v) 这条边。

对于这个连通块的方案,我们每次都需要选在原本 u 连通块或原本 v 连通块的点。

然而,对于不在两个分治中心的路径上的点,我们选它的方案已经被记录到原本的 DP 中了, 所以不用考虑它们。

接下来就是在分治中心路径上的点。同样的,我们选在原本 u 连通块的两个点的顺序不会影响答案。

所以说,我们合并只会乘上 (depu+depvdepu) 的方案数,其中 depu 表示 u 在原本连通块的点分树的深度。

最后 DP 即可,令 dpu,i 表示节点 u 的子树内,i 。可以证明,我们如果严格限制 DP 的枚举的上界的话,那么时间复杂度就是 O(n3) 而不是 O(n2)

Problem 10 - P10104

不会,记得补。

Problem 11 - CF1081G

首先对于块内和块之间分别统计。

块内:

对于 i,j,显然 aiaj 的大小关系是均等概率的,所以期望逆序对为 12

对于一个长度为 n 的块,一共有 n(n1)2i,j,所以块内的期望逆序对为 n(n1)4

块与块之间:

首先,手动模拟后,我们发现:对于两个不有序的 ab,我们分别以 ab 的前缀最大值划分 ab,归并排序就相当于将这些块按照前缀最大值排序。

接下来,同样对于 i,j 计算期望逆序对。由排序方式,只要 ij 是前缀最大值就无法满足条件,再加上 ai,aj 的大小关系同样是均等概率的,所以同样有 12 的期望大小关系,对于 i,j 就有 i+j22(i+j) 的期望逆序对。

最后,直接通过归并计算答案即可。

posted @   linxuanrui  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示