计数

10.19

P1655

斯特林数定义。
\(f(i,j) = f(i-1,j-1) + f(i-1,j) \times j\)。

P6475

考虑枚举 \(x,y\) 的高度 \(i\)。分讨 \(x,y\):

  • \(x \le n, y > n\)。\([1,x-1]\) 和 \([y+1,2n]\) 高度 \([1,i]\)。\([x+1,n],[n+1,y]\) 高度 \([i,m]\)。
  • \(x,y\le n\) 或 \(x,y > n\)。将 \([x,y]\) 之间压缩成一个高楼。那么同理。

CF2262C

记全局最大值为 \(x\)。可以证明 \(0\) 在 \(x\) 前面,且只有两个后缀最大值分别为 \(x,y\)。那么结构形如 \(....0...x....y\)。跳的时候,轮流在 \(x\) 前,\(x\) 后跳,放的数依次是 \(x-y,2y-x,2(x-y),3y-2x,\cdots\)。同一顺序可以交换,方案数就是阶乘。

ARC121E

巧妙的转化是记 \(b\) 为 \(a\) 的逆排列。那么 \(i\) 的要求相当于 \(b_i\) 不在 \(i\) 子树内。
考虑熔池,\(g_i\) 表示恰好 \(i\) 个节点不合法。那么答案就是 \(\sum_{i=0}^n (-1)^ig_i(n-i)!\)。
计算 \(g_i\),考虑 dp。\(f_{u,i}\) 表示 \(u\) 的子树内有 \(i\) 个节点不合法。类似树上背包转移:

  • \(f_{u,i+j} = f_{u,i} \times f_{v,j}\)。
  • \(f_{u,i} = f_{u,i-1} \times (siz_i - 1 - (i-1))\)。这是在钦定 \(i\) 不合法,那只能填子树内的点,还要去掉已经填了的点。(注意 \(b_i=i\) 是合法的)

那么 \(g_i = f_{1,i}\),时间复杂度 \(O(n^2)\)。

P2261

\(k \bmod i = k - i\times \lfloor \frac{k}{i} \rfloor\)。答案写成

\[nk - \sum_{i=1}^n i\times \lfloor \frac{k}{i} \rfloor \]

后者为整除分块。

P6162

朴素 dp。\(f_{i,j}\) 表示前 \(i\) 个数选了 \(j\) 个。转移

\[f_{i,j} = f_{i-1,j} + f_{i-1,j-1} \times (i-j+1) \]

注意到第二类斯特林数

\[S_2(n, m) = mS_2(n-1,m) + S_2(n-1,m-1) \]

考虑把 \(f\) 表示成这个东西。令 \(i-j+1 \to j\),有

\[f_{i,i-j+1} = f_{i-1,i-j+1} + f_{i-1,i-j} \times j \]

令 \(g_{i,j} = f_{i,i-j+1}\),则:

\[g_{i,j} = g_{i-1,j} + g_{i-1,j-1}j \]

答案即为 \(f_{n-1,k} = g_{n-1,n-k}\)。然后因为边界 \(g_{1,?} = {2 \brace x}\),故答案为 \(g_{n,n-k}\)。

P1450

答案就是求

\[\sum c_ix_i = s, x_i \le d_i \]

的解个数。考虑没有限制就是完全背包。否则记 \(f(S)\) 表示没有限制凑出 \(S\) 的方案数。
考虑熔池,枚举 \(x_i > d_i\) 的 \(i\) 集合。那么记 \(S' = S - (\sum d_i + 1)\),这样这个不合法的答案就是 \(f(S')\)。那么简单熔池即可。

posted @ 2026-10-19 14:59  RainyRadio  阅读(4)  评论(0)    收藏  举报