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}\)
我们对原式做一下变换
其实 \(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$