【科技】划分数反演

给定 \(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'\) 所在列。

\[\sum_t c(t)G_t = \sum_t c(t)\sum_{t'} a_{t,t'}F_{t'} = \sum_{t'}F_{t'}\sum_t c(t)a_{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\) 所在集合的大小,

得证。

posted @ 2023-05-27 14:04  Network_Error  阅读(12)  评论(0)    收藏  举报