第二类Stirling数
来源:互联网 发布:网络电视盒子怎么用 编辑:程序博客网 时间:2024/03/29 02:48
S(p,k)的一个组合学解释是:
将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。
也可以解释为:
p个有区别的球放到k个相同的盒子中,要求无一空盒,其不同的方案数用S(p,k)表示
S(p,k)的递推公式是:S(p,k) = k*S(p-1,k) + S(p-1,k-1) ,1<= k <=p-1
边界条件:
S(1,1) = 1 ,p>=1
S(p,0) = 0 ,p>=1
递推关系的说明:
考虑第p个物品,p可以单独构成一个非空集合,此时前p-1个物品构成k-1个非空的不可辨别的集合,方法数为S(p-1,k-1);
也可以前p-1种物品构成k个非空的不可辨别的集合,第p个物品放入任意一个中,这样有k*S(p-1,k)种方法。
若是把p个有区别的球放到k个不相同的盒子中,要求无一空盒,其不同的方案数用k!*S(p,k)表示
题目:Hearthstone II
<span style="font-size:18px;">#include <stdio.h> #include <string.h> #define max 105 #define mod 1000000007 long long s[max][max]; long long ans[max]; void init() { memset(s,0,sizeof(s)); s[1][1]=1; for(int i=2;i<=max;i++) for(int j=1;j<=max;j++) { s[i][j]=s[i-1][j-1]+j*s[i-1][j]; s[i][j]%=mod; } ans[1]=1; for(int i=2;i<=max;i++) { ans[i]=ans[i-1]*i; ans[i]%=mod; } } int main() { init(); int m,n; while(scanf("%d %d",&n,&m)!=EOF) printf("%lld\n",(s[n][m]*ans[m])%mod); return 0; } </span>
0 0
- 第二类Stirling数
- 第二类Stirling数
- 第二类Stirling数
- 【笔记】第一类Stirling数和第二类Stirling数
- 第一类Stirling数和第二类Stirling数
- 第一类stirling数和第二类stirling数
- 【知识点】 --- 第一类Stirling数和第二类Stirling数
- 第一类Stirling 数 与 第二类Stirling 数
- 第一类Stirling数和第二类Stirling
- 第一类Stirling数和第二类Stirling
- LightOJ 1326 Race (第二类Stirling数)
- SDNU 1011(第二类stirling数)
- hdu 4045 第二类Stirling数
- [转]第一类Stirling数,第二类Stirling数,Bell数
- [组合数学] 第一类,第二类Stirling数,Bell数
- [组合数学] 第一类,第二类Stirling数,Bell数
- 第一类、第二类Stirling数和Bell数
- 第一类,第二类Stirling数,Bell数
- 开源中国的 IT 公司开源软件整理计划介绍
- Linux 6.2 x86_64 安装ipvs
- MySQL存储引擎
- 四边形的循环
- js中事件处理函数的总结
- 第二类Stirling数
- hdu 1532 Drainage Ditches 网络最大流模板 EK + Dinic两种算法AC
- imap协议
- 链队列通用链表实现
- 别人技术面试总结(一)
- 军训
- 【Java】string split 分割误区
- LeetCode - String to Integer (atoi)
- 黑马程序员——OC语言基础篇---内存管理