Week 1 计数

愤怒了,看起来不弱于状压的真的只能用状压做。
这是啥题单啊啊啊啊啊啊啊啊啊。

qoj4811 Be Careful

一些记号:\(d_u\) 表示 \(u\) 的儿子个数,\(\delta_u=\max_v d_v\)\(t_u=\sum_v [d_v>0]\)

显然 \(u\) 填的数字 \(\le d_u\)
考虑 \(f_{u,i}\) 表示 \(u\) 节点填的颜色是 \(i\) 的方案数。转移看起来非常困难。

  • 转移方法 1:容斥,求出 \(g_S\) 表示 \(S\) 集合内元素不选的方案数,状态数 \(O(2^{d_u})\)。实际上儿子的值最大是 \(d_v\) 的,状态数减少为 \(O(2^{\delta_u})\)
  • 转移方法 2:状压儿子是否已经被考虑了,状态数 \(O(2^{t_u})\)

将两个方法合起来,复杂度 \(O(\min(2^{t_u}\cdot \mathsf{poly},2^{\delta_u}\cdot \mathsf{poly}))\),仍然不能通过。
\(u\) 的儿子分成两部分:\(P_u,Q_u\)。依据是 \([d_v\le B]\)
我们将两个 dp 的状态放在一起,状态数变为 \(O(2^{B+|Q_u|})\)
考虑 \(B\)\(O(\sqrt n)\),这样 \(|Q_u|\) 的总和不会超过 \(n/B\)
那么我们就可以在 \(O(2^{\sqrt {kn}}\cdot \mathsf{poly})\) 的复杂度内解决问题。其中 \(k\) 大概是 2 吧。

注意,上面的讨论中,我们并没有考虑叶子的贡献。叶子可以随意取可能会破坏复杂度。我们记录一维 \(ep\) 表示不容斥的位中,有多少个位置是没有被填数的。叶子去填掉这些位置,转移复杂度就可以被接受了。

P11420 [清华集训 2024] 乘积的期望

通过对状压数据点分治得到更低复杂度的做法。
类似的题:qoj4893 Imbalance

组合意义:每个位置选择一个覆盖它的操作的方案数。
转化为,每次操作可以选择一个它覆盖的子集 \(S_i\),要求 \(\sum |S_i|=n,\bigcup S_i=\{1,2,3,\cdots,n\}\)
显然会有很多的空集,我们将他们放在最后进行考虑。也就是要求每次我们不能选择空集。
这其实提示我们,答案是关于 \(C\)\(n\) 次多项式,我们求出前 \(n+1\) 项即可插值求出答案。

那么到这里显然有一个暴力的状压 dp,复杂度 \(O(n^2m2^m)\)
分析一下,发现中间部分每次操作都会覆盖到,于是我们只需要记录会被弹出的部分即可,复杂度变为 \(O(n^2m2^{\min(n-m,m)})\)

当我们有 \(m\ge \frac{n}{3}\) 时(不足补 \(b_i=0\)),我们可以这样做:
按照 \([1,m],[m+1,2m],[2m+1,3m-1]\) 划分为 3 行。
然后,按照列去考虑操作。枚举前两行的操作总个数,并设 \(f_{i,x,y}\) 表示 前 \(i\) 列第一/二行分别用了 \(x/y\) 次操作,分两步进行转移。这部分复杂度 \(O(n^6)\)

总复杂度 \(O(n^6+n^2m2^{\frac{n}{3}})\)。这类状压题还需多练!

P8367 [LNOI2022] 盒

计数题几种描述方式:贡献、递推、GF 等。一条路走不通就走别的路。

内层:从左往右做,往右挪 \(b_i-a_i\) 个,代价 \(|a_i-b_i|\times w_i\)
\(\mathsf {val}=\sum_{i=1}^{n-1} |sa_i-sb_i|\times w_i\)

限制有 \(sb_i\le sb_{i+1}\le S\)
考虑一个 \(sb_i\) 的贡献:\(\sum_{i=1}^{n-1} w_i\sum_{b=0}^{S}|sa_i-b|\binom{b+i-1}{i-1}\binom{S-b+n-i-1}{n-i-1}\)

考虑求 \(\sum_{b=0}^{sa_i} (sa_i-b)\binom{b+i-1}{i-1}\binom{S-b+n-i-1}{n-i-1}\) 这个东西。
写成一般形式:\(\sum_{i=0}^{A} (A-i)\binom{i+X}{X}\binom{S+Y-i}{Y}\)
对于 \(i\binom{i+X}{X}=(X+1)\binom{i+X}{X+1}\)
\(\sum_{i=0}^A i\binom{i+X}{X}\binom{S+Y-i}{Y}=(X+1)\sum_{i=0}^A \binom{i+X}{i-1}\binom{S+Y-i}{Y}=(X+1)\sum_{i=0}^{A-1} \binom{i+(X+1)}{i}\binom{(S-1)+Y-i}{Y}\) 转化为求 \(\sum_{i=0}^A \binom{i+X}{X}\binom{S+Y-i}{Y}\) 这类问题。

由于 \(A,X,Y\) 都是单调的,我们去维护每次加/减一的增量。
\(A\) 增加可以简单做。
对于 \(X\leftarrow X+1,Y\leftarrow Y-1\) 这个操作我们可以考虑原式的组合意义:
\((0,0)\to(X+Y+1,S)\),要求经过 \(x=X\) 时,\(y\le A\)。也就是必须经过 \(y=A,x\ge X+1\)
写成求和形式是 \(\sum_{i=X+1}^{(X+Y)+1} \binom{i+A}{A}\binom{S-A+(X+Y)-i}{(X+Y)+1-i}\),那么我们就可以得到增量是多少了。
复杂度 \(O(TS)\)

P8340 [AHOI2022] 山河重整

芝麻糊赛季 I。
充要条件:\(\forall x\in [1,n],\sum_{y\in S,y\le x} y \ge x\)
必要性显然。
证明(充分性):考虑从小到大加入 \(x\in S\),限制为当前的 \(\Sigma+1\ge x\),否则 \(\Sigma+1\) 永远无法凑出。得到 \(\Sigma\ge (x-1)\)

其实这个形式也是类似 Hall 定理的一个经典形式。例如:烙饼问题等。

接下来可以使用 GF 列出方程,并倍增求解。

qoj7766 栞

考虑 \(q=\{1,2,3,\cdots,n\}\)
\(p\) 划分为 \(\mathsf{div}(p)\) 个极小连续段,其中每个连续段 \([l,r]\),需要满足 \(\{p_i\}_{i=l}^r=\{l,l+1,\cdots,r\}\)
合法条件:\(\mathsf{div}(p)\ge k\),否则一个段若在中间被划开一定不能还原。
考虑计数,设 \(\mathsf{div}(p)=1\) 的排列方案数是 \(f_{|p|}\),这个可以容斥求出:AT_fps_24_k
\(f\) 的 GF 是 \(F\)。答案即为 \(\sum_{i\ge k}[x^n]F^i\)

现在 \(q\) 不一定是 \(\{1,2,3,\cdots,n\}\) 了。考虑 \(q\) 第一个不满足单调性的位置 \(t,q_{t+1}<q_t\)
发现一定有划分位置集合:\(\{x_1,x_2,x_3,\cdots,x_c=t,t',t'+1,t'+2,\cdots,n\}\)
如果后面有某个段不是单点的,考虑将他拆成两半,\(\mathsf{merge}(c,c+1)\) 一下,一定不劣的。
对于第 \(c+1\) 段中的数,只有 \(q_{t+1}<q_{t}\),且 \(p_{t'}=q_{t+1}\),否则我们可以将 \(x_c\) 划分成 \(t'-1\),一定不劣。

可以发现这样的条件就是充要的(\(\color{Red}\mathtt ?\)),考虑对于这样的条件计数。
枚举 \(t'\)。对于前 \(c\) 段,和弱化后的问题是一样的。对于第 \(c+1\) 段,只是固定了 \(p_{t'}\),对于剩下段必须和原来一样。
即,答案等于 \(\sum_{t'}[x^t]F^c(t'-t-1)!\)

posted @ 2026-01-05 14:51  TallBanana  阅读(29)  评论(0)    收藏  举报