LightOJ 1326 Race (第二类Stirling数)
来源:互联网 发布:一休哥 知乎 编辑:程序博客网 时间:2024/04/26 23:48
题目分析
第二类Stirling数 S(p,k)
S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。
k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。
S(p,k)的递推公式是:S(p,k)=k*S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1
边界条件:S(p,p)=1 ,p>=0 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)种方法。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1005;const int mod = 10056;int dp[maxn][maxn], f[maxn];void init(){ dp[1][1] = 1; for(int i = 2; i < maxn; i++) for(int j = 1; j <= i; j++) dp[i][j] = (j*dp[i-1][j] + dp[i-1][j-1])%mod; f[0] = 1; for(int i = 1; i < maxn; i++) f[i] = (f[i-1]*i)%mod;}int main(){ init(); int T, n; scanf("%d", &T); for(int kase = 1; kase <= T; kase++){ scanf("%d", &n); int ans = 0; for(int i = 1; i <= n; i++){ ans += dp[n][i]*f[i]; ans %= mod; } printf("Case %d: %d\n", kase, ans); } return 0;}
0 0
- LightOJ 1326 Race (第二类Stirling数)
- 第二类Stirling数
- 第二类Stirling数
- 第二类Stirling数
- 【笔记】第一类Stirling数和第二类Stirling数
- 第一类Stirling数和第二类Stirling数
- 第一类stirling数和第二类stirling数
- 【知识点】 --- 第一类Stirling数和第二类Stirling数
- 第一类Stirling 数 与 第二类Stirling 数
- LightOJ 1326 - Race(第二类斯特林数啊 )
- 第一类Stirling数和第二类Stirling
- 第一类Stirling数和第二类Stirling
- SDNU 1011(第二类stirling数)
- hdu 4045 第二类Stirling数
- [转]第一类Stirling数,第二类Stirling数,Bell数
- [组合数学] 第一类,第二类Stirling数,Bell数
- [组合数学] 第一类,第二类Stirling数,Bell数
- 第一类、第二类Stirling数和Bell数
- 欢迎使用CSDN-markdown编辑器
- JavaScript 的性能优化:加载和执行
- ItemTouchHelper实现短按拖拽
- javascript函数声明传参问题
- SVM学习总结(二)SVM算法流程图
- LightOJ 1326 Race (第二类Stirling数)
- C++ 存储类的含义和区别
- 微信小程序开发之入门详解
- android实现沉浸式状态栏效果
- Notification的一个简单应用代码示例
- C++编程中指针的声明与基本使用讲解
- Atitit Atitit 零食erp数据管理---世界著名零食系列数据.docx世界著名零食
- Struts2.0 数据的存储
- 在win10系统和VS2013环境配置PCL1.7.2点云库及常见问题解答(附带各种版本安装包下载)