Skip to content
0

202509 组合数学与计数类 DP 笔记

1. P2051 [AHOI2009] 中国象棋

一格一格进行考虑做 DP 想不出来,考虑到一行实际上只需要选两格进行操作,因此可以一行一行操作。

fi,j,k 表示考虑到第 i 行,有 mjk 列有 0 个棋子,有 j 列有 1 个棋子,有 k 列有 2 个棋子。边界条件为 f0,0,0=1。考虑 i1i 的转移分类讨论。

  • i 行放 0 个:不变。
  • i 行放 1 个:可以在 j+1 列里面选一列变成 2 个棋子的,01 个同理。
  • i 行放 2 个:可以选择两列 0,选择两列 1 或选择一列 0、一列 1 进行放置,分别分类讨论,乘上选择其中几列的方案数即可。

最终没有规定有几列 1/2,因此答案是 i,jfn,i,j

状态数 O(n3),转移 O(1),时间复杂度 O(n3),空间复杂度 O(n3)

2. P3158 [CQOI2011] 放棋子

fid,i,j 表示考虑了前 id 种颜色,现在已经占据了 ij 列。边界条件 f0,0,0=1

那么枚举第 i1 列占据了 pq 列,那么第 id 种颜色就占据了 dx=ip 行,dy=jq 列。先从剩下的 np 行里选这么多行出来:(npdx)(mqdy),然后再乘上 dxdy 列放 aid 个棋子的方案数,记作 gid,dx,dy

考虑求 gid,i,j,首先直接从 ij 列里面选 id 个出来:(i×jid)。但是有可能实际只占据了 pq 列,可能的方案是 gid,p,q×(ip)×(jq),容斥减去即可。

状态数 O(nmc),转移 O(nm),时间复杂度 O(n2m2c),空间复杂度 O(nmc)

3. AT_abc180_f [ABC180F] Unbranched

容斥的另一种体现:差分。

当恰好连通块最大为 L 不好做时,考虑转换为最多为 L,减去最多为 L1 的答案。

fi,j 表示考虑了 i 个点 j 条边且每个连通块的大小都不超过 L 的方案数。边界条件为 f0,0=1

考虑 i,j 转移,枚举当前连通块的大小 k。考虑链的情况,则需要 k1 条边:fik,jk+1fi,j。如果这条链的点直接在剩下的点里面随便选的话,可能会选出 123,456456,123 两种本质相同的情况。解决方案就是强制选当前未选的点的最小点。然后选好点只有,有 k! 种排列方式。除掉 1221 这样重复的排列情况,综上:

fi,jfi,j+fik,jk+1×(ni+k1k1)×k!÷2

接着环的情况也是一样的,只不过要多选一条边,还要除去环同构的情况(12312312)。

fi,jfi,j+fik,jk×(ni+k1k1)×k!÷2÷k

细节是大小为 1 的链和 2 的环没有算出来两个颠倒的的情况,不需要 ÷2

状态数 O(NM),转移 O(L),时间复杂度 O(NML),空间复杂度 O(NM)

最近更新