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個放一起)