Loading

同类与单个考虑时的顺序问题

同类与单个考虑时的顺序问题

一、三个问题

(一)无序

问题

求满足 \(\sum_{c\in S}c=m\) 的正整数可重集合 \(S\) 的个数。\(m\) 是给定的。

做法

对每一种元素 \(c\) 考虑,其生成函数为 \(F_c(x)=1+x^c+x^{2c}+\cdots=\frac1{1-x^c}\)

那么答案为:\(\prod_{i=1}^mF_i(x)=\frac1{\prod (1-x^i)}\)

(二)有序st

问题

求满足 \(\sum_{i}a_i=m\) 的正整数序列 \(\{a\}\) 的个数,\(m\) 是给定的。

做法

对于每个位置考虑,有生成函数 \(F(x)=1+x+x^2+\cdots=\frac1{1-x}\)

假设序列有 \(k\) 个数,那么答案为 \(F^k(x)\)

所以最终答案为 \(\sum_iF^i(x)=\frac1{1-F(x)}=1-\frac 1x\)

二、转化

(一)有序 \(\to\) 无序

可以发现问题等价于:对于正整数可重二元组 \((\alpha,\beta)\) 集合 \(S\),求满足 \(\alpha\le m,\sum \alpha =m,\beta\)\(1\sim |S|\) 的一个排列的 \(S\) 的数量

(二)无序 \(\to\) 有序

把集合 \(S\) 中的元素排序,就变成了对上升序列的计数。

再对其进行差分,就变为了序列计数。

上述问题等价于:假设非负整数序列 \(\{c\}\) 的长度为 \(n\),求满足 \(\sum_{i=1}^nc_i(n-i+1)=m,c_1\ge 1\) 的序列 \(\{c\}\) 的个数。

三、DP上的应用

按同类处理无序按每个处理有序,这种思路不仅在生成函数上,在dp上也可以用

试试看!

CF848D Shake It!

快进:建树+抽象圆方点(不是圆方树)+dp。

现在有 \(f_{i,j}\) 表示进行了 \(i\) 次操作,最小割为 \(j\) ,根节点为方点的方案数,$$g_{i,j}$ 表示进行了 \(i\) 次操作,最小割为 \(j\) ,根节点为园点的方案数。

要求方点的儿子——圆点之间是无序的,按照每个子树难以更新。

按照上文的思路,应该分类子树更新。

\[f_{x,y}\sum_{i,j,k}g_{i,j}{g(i,j)+k\choose k}\to f_{x+ik,y+jk} \]

\(g(i,j)\) 就是一类子树,\(k\) 即为选择个数,写出了转移式。

posted @ 2025-05-14 20:44  lupengheyyds  阅读(10)  评论(0)    收藏  举报