斯特林数

第一类斯特林数
定理:
第一类斯特林数S1(p,k)计数的是把p个对象排成k个非空循环排列的方法数。

证明:把上述定理叙述中的循环排列叫做圆圈
递推公式:
S1(p,p)=1(p>=0),有p个人和P个圆圈,每个圆圈就只有一个人
S1(P,0)=0(P>=1)如果至少有1个人,那么任何安排都至少包含一个圆圈
S1(P,K)=(P-1)*S1(P-1,K)+S1(P-1,K-1)

//代码:
long long s1[maxn][maxn];//存放第一类Stirling数
long long mod=1e9+7;//取模
void init()
{
    s1[1][1]=1;
    for(int i=2;i=0)   
S2(P,0)=0 (p>=1)  
S2(p,k)=k*S2(p-1,k)+S2(p-1,k-1)  (1<=k<=p-1)

//代码:
long long s2[maxn][maxn];//存放第二类Stirling数
long long mod=1e9+7;//取模
void init()
{
    s2[1][1]=1;
    for(int i=2;i

 

你可能感兴趣的:(模板)