HDU 2643 Rank:第二类Stirling数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643

题意:

  有n个个选手参赛,问排名有多少种情况(可以并列)。

题解:

  简化问题:

    将n个不同的元素放到i个有差别的盒子中,情况数为P(n,i),求∑P(n,i) (1<=i<=n)

  再简化:

    将n个不同的元素放到i个无差别的盒子中,情况数为S(n,i),求∑( S(n,i)*i! ) (1<=i<=n)

  

  哇这是第二类Stirling数 ( ̄▽ ̄)~*

  递推式:s(n,k) = s(n-1,k-1) + k*s(n-1,k)

AC Code:

 1 // s(n,k) = s(n-1,k-1) + k*s(n-1,k)
 2 // s(n,n) = 1
 3 // s(n,0) = 0
 4 // ans = sigma(s[n][i = 1 to n] * i!)
 5
 6 #include <iostream>
 7 #include <stdio.h>
 8 #include <string.h>
 9 #define MAX_N 105
10 #define MOD 20090126
11
12 using namespace std;
13
14 int n,t;
15 long long s[MAX_N][MAX_N];
16 long long sum[MAX_N][MAX_N];
17 long long fact[MAX_N];
18
19 void stirling()
20 {
21     memset(s,0,sizeof(s));
22     for(int i=1;i<MAX_N;i++)
23     {
24         s[i][i]=1;
25         for(int j=1;j<i;j++)
26         {
27             s[i][j]=(s[i-1][j-1]+j*s[i-1][j])%MOD;
28         }
29     }
30 }
31
32 void cal_fact()
33 {
34     fact[0]=1;
35     for(int i=1;i<MAX_N;i++)
36     {
37         fact[i]=(fact[i-1]*i)%MOD;
38     }
39 }
40
41 int main()
42 {
43     stirling();
44     cal_fact();
45     cin>>t;
46     for(int cas=1;cas<=t;cas++)
47     {
48         cin>>n;
49         long long sum=0;
50         for(int i=1;i<=n;i++)
51         {
52             sum+=s[n][i]*fact[i];
53             sum%=MOD;
54         }
55         cout<<sum<<endl;
56     }
57 }
时间: 2024-08-05 23:41:27

HDU 2643 Rank:第二类Stirling数的相关文章

poj 1671 Rhyme Schemes 第二类Stirling数

题意: 求s(n,0)+s(n,1)+...s(n,n),s(i,j)为第二类Stirling数. 分析: 有递推公式s(p,k)=(p-1)*s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1. 代码: //poj 1671 //sep9 #include<iostream> using namespace std; double s[64][64]; double sum[64]; int main() { for(int i=0;i<=50;++i){ s[i

[组合数学] 第一类,第二类Stirling数,Bell数

一.第二类Stirling数 定理:第二类Stirling数S(p,k)计数的是把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数. 证明:元素在拿些盒子并不重要,唯一重要的是各个盒子里装的是什么,而不管哪个盒子装了什么. 递推公式有:S(p,p)=1 (p>=0)         S(p,0)=0  (p>=1)         S(p,k)=k*S(p-1,k)+S(p-1,k-1)   (1<=k<=p-1) .考虑将前p个正整数,1,2,.....p的集合作为要被

[ACM] FZU 1570 集合划分问题( 不同小球放入相同盒子,第二类Stirling数)

Problem Description n个元素的集合{1,2,...,n}可以划分若干个非空子集.例如,当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集如下: {{1},{2},{3},{4}}, {{1,2},{3},{4}}, {{1,3},{2},{4}}, {{1,4},{2},{3}}, {{2,3},{1},{4}}, {{2,4},{1},{3}}, {{3,4},{1},{2}}, {{1,2},{3,4}}, {{1,3},{2,4}}, {{1,4},{2,

第二类Stirling数初探 By cellur925

上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验,逃.) 一.什么是第二类Stirling数 第二类斯特林数 S(n,k):把 n 个元素划分成 k 个集合的方案数.  这个问题说的实际一点,就比如说,有n个互异的小球,把他们放入m个盒子里,盒子里不允许为空的方案数.我们设s(i,j)表示放到i个小球,j个盒子的方案数. 那么对于每个小球,当前我们有两种

Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)

Bell Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4767 Description What? MMM is learning Combinatorics!? Looks like she is playing with the bell sequence now: bell[n] = number of ways to part

组合计数 &amp;&amp; Stirling数

参考: http://blog.csdn.net/qwb492859377/article/details/50654627 http://blog.csdn.net/acdreamers/article/details/8521134 http://blog.csdn.net/sr_19930829/article/details/40888349 球,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,

lightoj1326_第二类Stirling

题目链接http://lightoj.com/volume_showproblem.php?problem=1326 1051 - Good or Bad    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB A string is called bad if it has 3 vowels in a row, or 5 consonants in a row, or both. A strin

贝尔数(来自维基百科)&amp; Stirling数

贝尔数 贝尔数以埃里克·坦普尔·贝尔(Eric Temple Bell)为名,是组合数学中的一组整数数列,开首是(OEIS的A000110数列): Bell Number Bn是基数为n的集合的划分方法的数目.集合S的一个划分是定义为S的两两不相交的非空子集的族,它们的并是S.例如B3 = 5因为3个元素的集合{a, b, c}有5种不同的划分方法: {{a}, {b}, {c}} {{a}, {b, c}} {{b}, {a, c}} {{c}, {a, b}} {{a, b, c}}; B0

两类Stirling数

转:http://blog.csdn.net/acdreamers/article/details/8521134 第一类Stirling数 s(p,k)    s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数. s(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可以单独构成一个非空