斯特林數

題:

bzoj4555題解
bzoj2159題解
bzoj3000
hdu4676
hdu3625
poj1671
poj1430
poj1423

第一類斯特林數

s(p,k)的一個的組合學解釋是:將p個物體排成k個非空循環排列的方法數。

s(p,k)的遞推公式:
s(p,k)=(p1)s(p1,k)+s(p1,k1),1kp1
邊界條件:
S(p,p)=1,p0
S(p,0)=0,p1

遞推關係的說明:
考慮第p個物品,p可以單獨構成一個非空循環排列,這樣前p-1種物品構成k-1個非空循環排列,方法數爲s(p-1,k-1);
也可以前p-1種物品構成k個非空循環排列,而第p個物品插入第i個物品的左邊,這有(p-1)*s(p-1,k)種方法。

    for (int i=0;i<N;i++){
        s[i][0]=0;s[i][i]=1;
        for (int j=1;j<i;j++)
            s[i][j]=(s[i-1][j-1]+(i-1)*s[i-1][j]%mod)%mod;
    }

第二類斯特林數

S(p,k)的一個組合學解釋是:將p個物體劃分成k個非空的不可辨別的(可以理解爲盒子沒有編號)集合的方法數。
k!S(p,k)是把p個人分進k間有差別(如:被標有房號)的房間(無空房)的方法數。
  
S(p,k)的遞推公式是:
S(p,k)=kS(p1,k)+S(p1,k1),1kp1
邊界條件:
S(p,p)=1,p0
S(p,0)=0,p1
  
遞推關係的說明:
考慮第p個物品,p可以單獨構成一個非空集合,此時前p-1個物品構成k-1個非空的不可辨別的集合,方法數爲S(p-1,k-1);
也可以前p-1種物品構成k個非空的不可辨別的集合,第p個物品放入任意一箇中,這樣有k*S(p-1,k)種方法。

    for(int i=1;i<N;i++){  
        s[i][i]=1;s[i][0]=0;  
        for(j=1;j<i;j++)   
            s[i][j]=(s[i-1][j-1]+j*s[i-1][j]%mod)%mod;  
    }  
發佈了193 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章