斯特林数

来源:互联网 发布:中国少儿编程培训市场 编辑:程序博客网 时间:2024/05/21 02:36
•斯特林数分为两种,经常出现在许多组合枚举问题中。
•第一类斯特林数,是把n个不同的物体分为k个不同的非空循环排列的方案个数。(循环指一个接一个有关系的,不一定是圆)
•第二类斯特林数,是把n个不同的物体分为k个不同的非空集合的方案个数。(S(p,k)=s(p-1,k)+s(p-1,k-1)*k)
•斯特林数的S(p,p)=1S(p,0)=0 
•注意S(0,0)=1
•第一类Stirling数 s(p,k)
•s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。
•s(p,k)=(p-1)*s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1
•边界条件:s(p,0)=0,p>=1  s(p,p)=1  ,p>=0
•递推公式的意思是,当我考虑放第p个物品时,方案首先有第p个物品单独组成一个排列,其他p-1个有k-1个排列,即s(p-1,k-1)。再有就是把第p个元素放在已有的k个排列中,因为是循环排列,添加在每一个元素的左边都是不同,即(p-1)*s(p-1,k);
•代码的实现
<span style="font-size:18px;">for(i=0;i<N;i++)  {      C[i][0]=1;      C[i][i]=1;      S[i][0]=0;      S[i][i]=1;      for(j=1;j<i;j++)      {         C[i][j]=(C[i-1][j]%MOD+C[i-1][j-1]%MOD)%MOD;         S[i][j]=((i-1)%MOD*S[i-1][j]%MOD+S[i-1][j-1]%MOD);      }  }  </span>

第一类简单题目 hdu4372   http://acm.hdu.edu.cn/showproblem.php?pid=4372  
                          hdu3625  http://acm.hdu.edu.cn/showproblem.php?pid=3625
第二类简单题目 hdu4045  http://acm.hdu.edu.cn/showproblem.php?pid=4045
0 0
原创粉丝点击