加载中...

ABC 465 F (高维前缀和+ 容斥原理)

F - Sjeltzer?

前置知识:高维前缀和,容斥原理

将每一位数字看作是一个维度,那么当只考虑 \(y\) 限制时,原问题可以看作是六维前缀和问题。

\(dp_{y}\):考虑原 \(ID\) 集合里的所有串,满足 \(\forall i \in [1,6], s_{i} \le y_{i}\) 的所有 \(ID\) 的价值总和。

初始化 \(dp_{x} = \sum_{ID_{i} = x}v_{i}\),对十进制中的 \(6\) 个数位分别作前缀和,即可得到正确的 \(dp\)

高维前缀和大多用来描述二进制子集包含形式,也就是在二进制情形下的高维前缀和;本题是在十进制情形下的高维前缀和

然后考虑原问题:共有 \(x,y\) 两种限制,其中 \(y\) 的限制与上述相同;\(x\) 的限制:\(\forall i \in [1,6], s_{i} \ge x_{i}\)

显然只需在满足 \(y\) 限制的所有情况中,去除不满足 \(x\) 限制的所有情况。而某个 \(ID\) 不满足 \(x\) 限制,当且仅当 \(\exists i \in [1, 6], s_{i} \le x_{i} - 1\)这里相当于对共 \(6\) 个数位求有关不满足限制的并集,可以容斥原理求解:考虑 \(6\) 个数位的某个子集,要求子集内的数位必须强制满足 \(x\) 限制(\(d_{i} = x_{i} - 1\)),不在子集内的数位任意(但要注意仍需满足 \(y\) 限制,即 \(d_{i} = y_{i}\))。求得状态 \(d\) 后,根据子集大小对总贡献奇减偶加 \(dp_{d}\)。考虑所有 \(2^{6}\) 个子集的情况即可得到最终的答案。

需要注意一些特判,这里不作赘述。

复杂度 \(O(D * B^{D} + q * 2^{D} * D)\),其中 \(B = 10\) 表示进制,\(D = 6\) 表示数位个数。

code

posted @ 2026-07-05 01:14  小橘奏  阅读(24)  评论(0)    收藏  举报