LOJ tangjz的背包

题目大意

\(n\) 个物品, 第 \(i\) 个物品的体积为 \(i\)
\(f(x)\) 为 选择 \(m\) 个物品, 体积和为 \(x\) 的方案数
\(V = \sum_{i=1}^m (n-i+1)\)
\(f(1)\cdots f(V)\) 关于 \(w=19190506\)\(hash\)
\(1\le m\le n \le 10^{12}\)

subtask 1

考虑递推
\(f[n,m,x]\)\((a_1,\cdots,a_m), a_i\ge 1, \sum a_i = x\) 的划分数量
我们让 \(a_i -= 1\) , 相当于物品大小变为 \([0,n-1]\), 所需体积变成 \(x-m\)
枚举 \(0\) 号物品是否选择
就得到递推式 \(f[n,m,x] = f[n-1,m,x-m] + f[n-1,m-1,x-m]\)

举个例子 (前两行平移了一下) :

f[3,1] =     (0,1,1,1,0,0)
f[3,2] =     (0,0,0,1,1,1)
f[4,2] = (0,0,0,1,1,2,1,1)

将第三维 \(hash\) 起来
那么 \(f[n-1,m-1]\) 那边需要补上后面的 \(n-m\) 个空位
\(f[n-1,m]\) 那边不需要

于是有 \(f[n,m] = f[n-1,m] + f[n-1][m-1] w^{n-m}\)

subtask 2

搞搞生成函数什么的.

subtask 3

观察本题的递推式, 有 \(\downarrow\), \(\searrow\) 两种移动方式
每列只能用恰好一次 \(\searrow.~~\) 确定好在哪里使用 \(\searrow\) 就可以确定路径
\(\searrow\) 标号. 设标号为 \(i\)\(\searrow\) 在第 \(p_i\) 行使用
我们要算的东西是: $$\sum_{1\le p_1\lt p_2\lt \cdots\lt p_m\le n} \frac{\prod_{i=1}^m w{p_i}}{\prod_{i=1}m w^i}$$
考虑如下的变换 :
\(p'_i = p_i - \sum_{j<i} [p_j<p_i]\). 可知 \(1\le p'_i \le n-i+1\).
而对于任一一组满足条件的 \(p'\), 每次让 \(p_i\) 选在剩余可选位置中第 \(p'\) 个即可. 构成双射.
\(\sigma(p)\) 表示 \(p\) 中的顺序对个数
那么 \(\prod w^{p'_i} = w^{-\sigma(p)} \prod w^{p_i}\)

\(S\)\(\sum_{排列(置换)} w^{\sigma}\)
我们对原式做一下变换

\[\begin{aligned} & \sum_{1\le p_1\lt p_2\lt \cdots\lt p_m\le n\\1\le q_1\lt q_2\lt \cdots \lt q_m \le m}\frac{ \prod w^{p_i} } { \prod w^{q_i} } && 等价形式\\ &= \sum_{p, q} \frac{ w^{\sigma(p)} \prod w^{p_i} } { w^{\sigma(q)} \prod w^{q_i} } && 上下同时乘S, 并将置换作用在p,q上\\ &= \sum_{p', q'} \frac{ \prod w^{p'_i} } { \prod w^{q'_i} }\\ &= \frac{ \prod_{i=1}^m (\sum_{j=1}^{n-i+1} w^j) } { \prod_{i=1}^m (\sum_{j=1}^{m-i+1} w^j)} && 交换计算顺序\\ &= \frac{ \prod_{i=1}^m (\sum_{j=0}^{n-i} w^j) } { \prod_{i=1}^m (\sum_{j=0}^{m-i} w^j)} && 上下同时除w^m \\ &= \frac{ [n]^{\underline m} } { [m]! } && [k] = \frac{q^k-1}{q-1}(等比数列和)\\ &= \frac{ \prod_{i=1}^m (q^{n-i+1}-1) } { \prod_{i=1}^m (q^i-1) }\\ \end{aligned} \]

其实 \(f[n,m] = {\binom n m}_w\)
关于本题递推式的更多信息可以参考wiki

subtask 4

先回顾 lucas 定理 : \(\binom n m \equiv \binom {\lfloor \frac n p\rfloor}{\lfloor \frac m p\rfloor} \binom {n\bmod p}{m\bmod p} \pmod p\)
证明 :
\(n!\bmod p = (\prod_{i=1}^{\lfloor \frac n p\rfloor} ip)~(\prod_{i=1}^{p-1})^{\lfloor \frac n p \rfloor}~(\prod_{i=1}^{n\bmod p} i)\)
也即分成三个部分, 整除部分, 整块部分, 剩余部分
只有第一部分有 \(p\). 它可以写成 \(p^{\lfloor \frac n p \rfloor} \lfloor \frac n p \rfloor !\)
(1) \(\lfloor \frac {n-m} p \rfloor + \lfloor \frac m p \rfloor < \lfloor \frac n p \rfloor\)
此时幂部分 \(p\) 有剩余, 阶乘部分剩余为整数, 无法将 \(p\) 抵消. 值为 \(0\)
对应的, 在lucas定理中, \(n\bmod p + m\bmod p > p\), 使得组合数值为 \(0\)
(2) \(\lfloor \frac {n-m} p \rfloor + \lfloor \frac m p \rfloor = \lfloor \frac n p \rfloor\)
此时原式中的第一部分剩下的是组合数, 第二部分抵消, 第三部分不变.

这样不用生成函数来证明, 更容易推广一些

推广到这一题:
考虑令 \(w^a-1\equiv 0\) 的最小的 \(a\)
\(fac[n] = \prod_{i=1}^n (q^i-1)\)
那么 \(fac[n] = (\prod_{i=1}^{\lfloor \frac n a \rfloor}q^{ai}-1)~(\prod_{i=1}^{n-1} q^i-1)^{\lfloor \frac n a \rfloor}~(\prod_{i=1}^{n\bmod a} q^i-1)\)
因式分解 \(q^{ai}-1 = (q^a-1)(\sum_{k=0}^{i-1}q^{ak}) = i(q^a-1)\)
因此 $fac[n] = (qa-1) \lfloor \frac n p \rfloor! \( 剩下的推导就同理了, 最终得到: \){\binom n m}_w = \binom {\lfloor \frac n a \rfloor}{\lfloor \frac m a \rfloor} {\binom {n\bmod a}{m\bmod a}}_w$

posted @ 2018-06-21 11:00  _zwl  阅读(195)  评论(0编辑  收藏  举报