Examining the Rooms - 第一类斯特灵数

---恢复内容开始---

2017-08-10 20:32:37

writer:pprp

题意如下:

Recently in Teddy‘s hometown there is a competition named "Cow Year Blow Cow".N competitors had took part in this competition.The competition was so intense that the rank was changing and changing. 
Now the question is: 
How many different ways that n competitors can rank in a competition, allowing for the possibility of ties. 
as the answer will be very large,you can just output the answer MOD 20090126. 
Here are the ways when N = 2: 
P1 < P2 
P2 < P1 
P1 = P2

InputThe first line will contain a T,then T cases followed. 
each case only contain one integer N (N <= 100),indicating the number of people.OutputOne integer pey line represent the answer MOD 20090126.Sample Input

2
2
3

Sample Output

3
13

代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

#define ll long long

using namespace std;

const int N = 110;
const int MOD = 20090126;
ll dp[N][N], ans[N], fac[N];

void init()
{
    fac[1] = 1;
    for(int i = 2; i < N; i++)
        fac[i] = (fac[i-1]*i)%MOD;   //阶乘初始化
    memset(dp, 0, sizeof(dp));
    for(int n = 1; n < N; n++)
    {
        dp[n][1] = 1;
        dp[n][n] = 1;
        for(int k = 2; k < n; k++)
        {
            dp[n][k] = dp[n-1][k-1]+k*dp[n-1][k];
            dp[n][k] %= MOD;
        }
    }
}

int main()
{
    int T, n;
    init();
    cin>>T;
    while(T--)
    {
        cin>>n;
        ll ans = 0;
        for(int i = 1; i <= n; i++)
            ans = (ans + fac[i]*dp[n][i]) % MOD;
        cout<<ans<<endl;
    }

    return 0;
}
时间: 2024-10-15 18:21:25

Examining the Rooms - 第一类斯特灵数的相关文章

counting the buildings - 第一类斯特灵数

2017-08-10 21:10:08 writer:pprp //TLE #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; typedef long long

hdu 2521 一卡通大冒险 (斯特灵数,贝尔数)

/* 将N张卡分成若干个集合,集合不为空,有多少种分法. f[n][m]表示n张卡分成m组的种类数,那么f[n][m]=f[n-1][m-1]+f[n-1][m]*m,//第二类斯特灵数 而ans[n]=sum{f[n][l]}(1<=l<=m).//ans为贝尔数,Bell数是将P个元素集合分到非空且不可区分例子的划分个数. 其中:f[n-1][m-1]代表第n个人自成一堆: f[n-1][m]*m代表第n个人不自成一堆. */ # include <stdio.h> # inc

HDU2512 一卡通大冒险【斯特灵数,贝尔数】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2512 题目大意: 有N张卡,将N张卡分成若干不同的集合,集合不能为空.问:总共有多少种分法. 思路: 参考博文:http://blog.csdn.net/acm_cxlove/article/details/7857671 集合的个数可以为1.2.3.-.N.问题就变为了把N张卡放到i个集合中. 这时候个组合问题,可以用第二类斯特灵数解决. S(P,K) = S(P-1,K-1) + K*S(P-

UVA 10844 - Bloques (第二类斯特灵数)

UVA 10844 - Bloques 题目链接 题意:给定n个数字,问这n个数字能分成子集分成有几种分法 思路:一开始先想了个状态,dp[i][j]表示放i个数字,分成j个集合的方案,那么转移为,从dp[i - 1][j - 1]在多一个集合,和从dp[i - 1][j]有j个位置放,那么转移方程为dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] * j;按理说这个状态转移是没问题的,但是由于这题答案是高精度,n为900时答案高达1700多位,加上高精度运算

挑战程序设计竞赛 划分数,贝尔数,斯特灵数

斯特灵数:把n个数划分为恰好k个非空集合的个数,记为S(n,k).且有:S(n,1)=S(n,n)=1. 有递推关系式: S(n+1,k)=S(n,k?1)+kS(n,k?1) 贝儿数:把n个数划分为非空集合的所有划分数.有: Bn=∑i=0nS(n,i) 贝尔数的递推公式: Bn=∑k=0n(nk)Bk 书上的划分数:书上求的是:把n个相同的数划分为不超过m个集合的方法总数.由于这n个数是相同的,就不能算作∑ki=0S(n,i).书上给了这样一个dp的转移方程(定义dp[i][j]为j个数的i

hdu 3625 Examining the Rooms —— 第一类斯特林数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 学习斯特林数:https://blog.csdn.net/qq_33229466/article/details/75042895 https://www.cnblogs.com/gzy-cjoier/p/8426987.html http://www.cnblogs.com/zhouzhendong/p/Stirling-Number.html 关于这道题: 得到一把钥匙后,可以连续开的门与钥匙

HDU 3625 Examining the Rooms 第一类斯特林数

最多可以暴力打开k次 对于一个环暴力一次 n个数排成i个(i<=k)非空环排列的种数 另外第一扇门不能暴力打开 所以1不能独立成环 #include <cstdio> #include <cstring> using namespace std; typedef __int64 LL; LL dp[22][22]; LL f[22]; int main() { dp[0][0] = 1; f[0] = 1; for(int i = 1; i <= 20; i++) {

Examining the Rooms HDU - 3625(第一类斯特林数)

Examining the Rooms HDU - 3625 题意:n个房间,每个房间里有一把钥匙(等概率),每进到一个房间可以得到钥匙去该钥匙对应的房间,如果当前没有钥匙则可以破门而入(1号房间不能破门而入),不过最多破门而入k次,问成功进入n个房间的总概率. 明显是求n个元素的i个环排列,i = 1,2,--,k. 不过要减去第一个房间自环的情况. 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long lon

弗罗贝尼乌斯範数(Frobenius norm)

弗罗贝尼乌斯範数 对 p = 2,这称为弗罗贝尼乌斯範数(Frobenius norm)或希尔伯特-施密特範数( Hilbert–Schmidt norm),不过后面这个术语通常只用于希尔伯特空间.这个範数可用不同的方式定义: 这里 A* 表示 A 的共轭转置,σi 是 A 的奇异值,并使用了迹函数.弗罗贝尼乌斯範数与 Kn 上欧几里得範数非常类似,来自所有矩阵的空间上一个内积. 弗罗贝尼乌斯范範数是服从乘法的且在数值线性代数中非常有用.这个範数通常比诱导範数容易计算.