1.n个数排列成k个环
这种情况即只需要考虑每个人左边是谁就ok啦。
考虑第n个人怎么插入,他既可以直接自己成一个环,也可以插到之前的人中间。
S(n,k)=S(n-1,k-1)+S(n-1,k)*(n-1) (因为这个人有n-1个地方可以塞进去)
S(n,k)表示n个人站成k个圆的方案数
2.n个元素拆成m个集合的方案数。
与上面的区别是,上面需要考虑每个圆里面的元素是怎么排列的。而这里只需要知道哪个个元素在一个集合里。
同样考虑第n个元素是怎么拆入的,他既可以自成一个集合,也可以放到之间的集合中。
S(n,k)=S(n-1,k-1)+S(n-1,k)*k
一道例题: CF568B
在这里我们可以把一个二元组看成一条边,然后这条边的2端链接的点就是一个二元组。那么对于一个图中的几个连通块,显然是满足这些3个性质的。而这道题我们要求满足后2个性质但没有满足后第一个性质的,即要在这个图里面找到一些点(不能是全部点),使得他们分成几个连通块。
这玩意长得和Bell数很像(bell数是i可以取1-n)
那么Bell数的一种理解就是n个元素连边划分成一些连通块的方案数。
考虑怎么用B(1)-B(n-1)推出B(n)。
B(n)=sum{B(n-i)*C(n-1,i-1)} 枚举第n个数所在的集合大小为i(在n-1个数里面选i-1个和第n个放一起)