计数
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\)。答案写成
后者为整除分块。
P6162
朴素 dp。\(f_{i,j}\) 表示前 \(i\) 个数选了 \(j\) 个。转移
注意到第二类斯特林数
考虑把 \(f\) 表示成这个东西。令 \(i-j+1 \to j\),有
令 \(g_{i,j} = f_{i,i-j+1}\),则:
答案即为 \(f_{n-1,k} = g_{n-1,n-k}\)。然后因为边界 \(g_{1,?} = {2 \brace x}\),故答案为 \(g_{n,n-k}\)。
P1450
答案就是求
的解个数。考虑没有限制就是完全背包。否则记 \(f(S)\) 表示没有限制凑出 \(S\) 的方案数。
考虑熔池,枚举 \(x_i > d_i\) 的 \(i\) 集合。那么记 \(S' = S - (\sum d_i + 1)\),这样这个不合法的答案就是 \(f(S')\)。那么简单熔池即可。
浙公网安备 33010602011771号