计数 dp

计数 dp

计数转期望/概率

CF838D:很难想到吧。考虑加上 \(n+1\) 这个虚拟节点,然后把这些点变成,如果没有一个人在 \(n+1\) 号节点坐就是合法的。一个人到一个特定的节点才开始找座位,可以视为他从这个节点上飞机,故视为每个人都随机开始随机坐下,故总的方案数为 \((2 \times (n+1))^m\) ,因为坐的点概率相等,所以没人坐在 \(n+1\) 号点的概率为 $ \frac{n+1-m}{n+1} $。故合法方案数为 \((2 \times (n+1))^m \times \frac{n+1-m}{n+1}\)


连续段dp

要点:一次加入所有相等的字符,对于“隔板”或者说“间隙”的考虑。


文字列

又在做立本题了,做这个tdpc有点难过,怎么把题面放限制里。

\(cnt_i\) 表示前 \(i\) 种字母总共有多少个,\(dp_{i,j}\) 表示现在放第 \(i\) 个字母,此时还有 \(j\)相邻字母是相同的。

为什么这么设计状态?

这类题目看上去就感觉如果不把相同字母在一次考虑就会发生很抽象的事,难以计算,所以按字典序放入每种字母,用 \(i\) 记录。将 不能相邻 转化为 相邻个数为 \(0\)\(j\) 用于统计答案。

考虑转移。枚举两个数 \(x,y\) ,把当前要放的字母 \(c\) 分成 \(x\) 段,将其中 \(y\) 段放入原来 \(y\) 个两边字母相等的间隙(总共 \(j\) 个),剩下 \(x-y\) 段放入原来 \(x-y\) 个两边字母不等的间隙(总共 \(cnt_{i-1}-j+2\) 个)。间隔法则可求出转移式

\[dp_{i,j+(a_i-x)-y}\leftarrow\sum_{x=1}^{a_i}\sum_{y=x}^jdp_{i-1,j} \begin{pmatrix} a_i-1 \\ x-1 \end{pmatrix} \begin{pmatrix} j \\ y \end{pmatrix} \begin{pmatrix} cnt_{i-1}+1 \\ y-x \end{pmatrix}\]

于是做完了,时间复杂度就是 \(len^3 \times 26\)

submission


Runs

对着它想了半天,结果告诉我段数小于 \(100\)

\(dp_{i,j}\) 表示放到第 \(i\) 个字母,总共有 \(j\) 段。

转移考虑。枚举插在两种间隙的数的个数,段数分别加 \(1,2\),和刚才的相似,不再赘述。


杂题

*P3643:首先一个暴力的 dp 很好想到,\(f_{i,j}\) 表示 考虑到 \(i\)\(i\) 学校选了 \(j\) 艘船的方案数,这是一个典型的背包。但是由于 \(j\) 太大了,于是想到对其进行离散化,现在 \(f_{i,j}\) 表示选的数量在\(j\)的方案数。由组合意义我们可知:

从区间 \([0,L]\) 中取 \(n\) 个数,要求所有非零数严格递增,则方案数为 $ \binom{n}{L+n} $

由这个结论,我们想到,枚举上一个落在非 \(j\) 区间的学校 \(k\),并算出 \(k+1\)\(i\) 之间能落在 \(j\) 区间的学校个数 \(m\),自此,我们可以使用这个推论转移,即:

\[\begin{array}{l} f_{0,1}=1 \\ f_{i, j}=\left\{\begin{array}{ll} \sum_{k=1}^{j-1} \sum_{p=0}^{i-1}\binom{L+m-1}{m} f_{p, k}, & j \subseteq I_{i} \\ 0, & j \nsubseteq I_{i} \end{array}\right. \end{array} \]

但此时仍会超时,于是考虑前缀和优化,得到

\[f_{i, j}=\sum_{p=0}^{i-1}\binom{L+m-1}{m} g_{p, j-1}, j \subseteq I_{i} \]

其中 \(g\) 数组即为前缀和数组,最后先枚举 \(j\) 再枚举 \(i\)滚动数组做一个背包就做完了。


Road of the King:神秘图论+dp。考虑将强连通转化为所有点都能到 \(1\) 号节点 。定义状态函数 \(f_{i,j,k}\) 表示从 \(1\) 出发走了 \(i\) 步,经过了 \(j\) 个点,其中有 \(k\) 个点能够到达 \(1\)。转移到下一个节点,分为没到过的,到过的但是不强连通,强连通的进行分类讨论。


ARC059F:对上脑电波的题。易观察到,只要是相同长度的字符串,即使长得不同,能得到这种字符串的按键顺序总数都是一样多的。接下来 dp 转移分为当前字符串是不是空进行分类讨论即可。


Grid 2:比较典型的 \(dp\)正难则反,考虑计算过了障碍的路径。因为在经过的第一个障碍处计数不会算重,所以令 \(dp_i\) 为 走到 \(i\) 且第一个经过的障碍为 \(i\) 的路径。容斥一下,减去所有经过其左上方节点的路径就算出来了。可以把 \((n,m)\) 视为最后一个障碍,转移式为:

\[ dp_i = \dbinom{x_i+y_i-2}{x_i-1} - \sum_{j=1}^{i-1}{dp_j \cdot \dbinom{x_i-x_j+y_i-y_j}{x_i-x_j} } \]

时间复杂度 $ O(n^2)$。省流:正难则反,在经过的第一个障碍处计数


P1758考虑 $ \sum{a^2} $ 的组合意义,可以视为两个人从两组相同的管道中取球,取到相同的序列的总可能数。令 $dp_{k,i,j} $ 为两人都取了 \(k\) 个球,第一个去了 \(i\) 个上管道的,第二个取了 \(j\) 个上管道的。转移很容易写出。

posted @ 2025-10-29 14:14  卢浮宫  阅读(2)  评论(0)    收藏  举报