【科技】划分数反演
给定 \(n,k\),求
\(\prod_{i=1}^k x_i=n!\),且 \(x_i\) 互不相同的解的数量,对 \(10^9+7\) 取模。
\(1\le k\le 60\),\(1\le n\le 100\)。
划分数反演
定义
对于任意分解 \(x_i\),把若干相等的元素的下标组成一个集合加入到集合 \(\pi\) 中,\(\pi\) 定义为 \(x\) 的 划分。
例如,\(\pi_{x=\{1,2,3,2\}}=\{\{2,4\},\{1\},\{3\}\}\)。
定义 \(\pi'<\pi\),\(\pi'\) 是 \(\pi\) 的 细分,当且仅当所有 \(\pi'\) 中的元素作为子集在 \(\pi\) 中的一个元素中出现。
例如,\(\{\{2,4\},\{1\},\{3\}\}<\{\{2,4\},\{1,3\}\}\)。
定义 \(\pi\) 的类型 \(t(\pi)\),为所有 \(i\in \pi,|i|\) 的集合。
初步转化
设 \(f_{\pi}=\) 划分为 \(\pi\) 的解的数量,\(g_{\pi}=\) 划分 \(\ge \pi\) 的解的数量,\(g\) 是好求的,等价于已知若干变量相等,经典背包。
设 \(F_{t}=\sum_{t(x)=t}f_x\),\(G_{t}=\sum_{x,t(x)=t}g_x\),\(F_{t},G_{t}\) 形如 \(f,g\) 乘上系数(组合数)的形式,\(G\) 是好求的。现在转化为求 \(F_{\{1,1,1,\cdots\}}\)。
记 \(m=k\) 的分解数,也就是 \(t\) 的个数。
求 \(F_{\{1,1,1,\cdots\}}\)
举例:\(k=4\),容易发现转移和 \(n\) 无关。
消元可以求出所有 \(F\),时间复杂度 \(\mathcal{O}(m^2)\)。
可以做到线性。
定义 \(c(t)=\prod_{i\in t}(i-1)!(-1)^{i-1}\)。
\(F_{\{1,1,1,\cdots\}}=\sum_t c(t)G_t\)。
证明 \(\sum_t c(t)G_t=F_{\{1,1,1,\cdots\}}\)
记 \(a_{t,t'}\) 为系数矩阵 \(t\) 所在行 \(t'\) 所在列。
下面证明 \(t'\ne \{1,1,1,\cdots\}\) 时,\(\sum_t c(t)a_{t,t'}=0\)。
\(a_{t,t'}\) 的含义是,对于任意一个 \(t'\) 类型的划分,都有 \(a_{t,t'}\) 个细分是 \(t\) 类型的。
\(\sum_t c(t)a_{t,t'}\) 的含义就是,对于 \(t\) 类型的任意一种划分,它的任意一种细分得到的类型,\(c(t)\) 之和。
\(t\) 的答案,等价于对 \(i\in t\),\(i\) 的答案的 积。
转化为证明:当 \(n>1\),\(n\) 个数划分为若干集合,每个集合大小 \(c\) 之和,一定为 \(0\)。
归纳,\(n=1\) 是为 \(1\),
\(n>1\) 时枚举 \(n\) 所在集合的大小,
得证。