题解 | #美丽的项链#

美丽的项链

https://ac.nowcoder.com/acm/problem/14735

美丽的项链经典容斥解法

这个也算是组合数学里面的一个经典容斥了,在组合数学第5版第六章第二节带重复的组合中的某个例题就讲到了这个问题的排容方法。
首先,对于该问题没有限制条件的版本:从无限集合{a1,a2,a3,,ak}\{a_1\cdot\infty,a_2\cdot\infty,a_3\cdot\infty,\dots,a_k\cdot\infty\}中选取n个对象的方案数,该问题可以转换成方程:

x1+x2+x3+x4++xk=nx_1+x_2+x_3+x_4+\dots+x_k=n

的解的数量。其中x1,x2,,xkx_1,x_2,\dots,x_k的值就对应着选择元素a1,a2,,aka_1,a_2,\dots,a_k的数量,而这个方程的解的数量又可以转换成集合{1n,k1}\{1\cdot n,* \cdot k-1\}的排列的数量,即用k-1个*号将n个1划分成k份。又由于*和1都没有区别。所以该排列的数量就是

Cn+k1k1C^{k-1}_{n+k-1}

即从n+k-1个位置中选k-1个位置给*号的方案数。
已知在无限制的情况下选取的的方法之后现在就可以讨论有下限的情况了,即对于类型aia_i的元素,至少要选bib_i个,这种情况下我依旧可以采用如上的转换,只不过这里设yi=xibiy_i=x_i-b_i,这样对于yiy_i的求解便没有限制了,于是得到方程

i=1kyi=ni=1kbi\sum^{k}_{i=1}{y_i}=n-\sum^{k}_{i=1}{b_i}

利用如上的隔板法得到该问题的方案数为

Cn+k1i=1kbik1C^{k-1}_{n+k-1-\sum^{k}_{i=1}{b_i}}

这样便解决了下界的限制,然后就是上界,对于上界目前我并不知道直接求解的方式,但可以利用容斥原理的经典容斥来解。
什么是经典的容斥呢,给出如下问题有3个相互之间都有交集的集合A1,A2,A3A_1,A_2,A_3,已知A1=30,A2=50,A3=40,A1A2=20,A2A3=10,A1A3=10,A1A2A3=5|A_1| = 30,|A_2| = 50,|A_3|=40,|A_1\bigcap A_2|=20,|A_2\bigcap A_3|=10,|A_1\bigcap A_3|=10,|A_1\bigcap A_2\bigcap A_3|=5,问你A1A2A3=?A_1\bigcup A_2\bigcup A_3 = ?.答案如下:

A1A2A3=A1+A2+A3A1A2A2A3A1A3+A1A2A3\begin{aligned} A_1\bigcup A_2\bigcup A_3 = |A_1| + |A_2| + |A_3| -|A_1\bigcap A_2|-|A_2\bigcap A_3|-|A_1\bigcap A_3| +|A_1\bigcap A_2\bigcap A_3| \end{aligned}

接下来来看看本题的限制条件已知无限集合{a1,a2,a3,,ak}\{a_1\cdot\infty,a_2\cdot\infty,a_3\cdot\infty,\dots,a_k\cdot\infty\},我们要从中选取n个元素,设这些元素的选取个数分别如下x1,x2,xkx_1,x_2,\dots x_k,并且,我们规定xi,lixiri\forall{x_i},l_i\leq x_i\leq r_i,在这里我们可以设Piyiri+1P_i 为y_i \geq r_i + 1的性质,设AiPiA_i表示满足性质P_i的解组成的子集。并设全集\bigcup为满足xili性质x_i\geq l_i的解的集合,于是原问题的解变成了计算集合i=1kAi\bigcap^{k}_{i=1}\overline{A_i}的大小,也就是i=1kAi|\bigcup| -|{\bigcup^{k}_{i=1}A_i}|。这里便将所有计算都变成了只有下界的计算,接下来便是枚举性质PiP_i的选取方案来求A1A2A3AkA_1\bigcup A_2\bigcup A_3\bigcup \dots \bigcup A_k​的大小了,这里可以采用2进制状态压缩来枚举,因为对于每一个子集的每一个元素,都只有两种状态,具备性质Pi(yiri+1)P_i(y_i\geq r_i+1)或者Pi(yili)\overline{P_i}(y_i\geq l_i)。同时二进制中1的个数代表具备性质PiP_i的子集的个数决定了该方案的符号。

全部评论

相关推荐

头像
04-09 14:29
Java
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务