数数有多少

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

小财最近新开了一家公司,招了n个员工,但是因为资金问题,办公楼只有m间办公室,于是小财找到了作为程序员的你解决一个问题:将这n个不同的员工安排在m间相同的办公室(即办公室不可区分)一共有多少种方式?其中每间办公室可以安排任意个数的雇员(包括空办公室).

Input:

输入有多组数据
每组数据输入两个数n m (0<m<=n<=100)

Output:

输出安排的方式数(由于答案较大,最终输出答案对1000007取模)

Sample Input:

4 3

Sample Output:

14

hint:
对于样例有以下几种方式:
1、把4个员工分到一间办公室,1种
2、将3个员工安排在同一间办公室,第4个员工安排在另一间办公室,4种
3、将2个员工安排在同一间办公室,另外2个员工安排在另一间办公室,3种
4、将2个员工安排在同一间办公室,另外2个员工各自安排在不同的办公室,6种
所以1+4+3+6=14种
解题思路:第二类斯特林数:把n个元素划分成m个无序集合的方案数。递推一下公式:dp[i][j]表示i个元素分成j个集合的方案数。①如果i-1个元素已经构成了j-1个集合,那么第i个元素单独构成一个集合的方案数为dp[i-1][j-1]*1(空的集合都是无序相同的,任选一个即可);②如果i-1个元素已经构成了j个集合,将第i个元素插入到任一个集合中的方案数为dp[i-1][j]*j(选择j个集合中的一个有j种选法)。所以i个元素构成j个集合的总方案数为dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j。对于这道题,思路基本一样,简单套一下递推公式即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
const int mod=;
typedef long long LL;
LL ans,dp[maxn][maxn];int n,m;
int main(){//第二类斯特林数
while(cin>>n>>m){
memset(dp,,sizeof(dp));ans=;//清0
for(int i=;i<=n;++i)dp[i][]=;//将i个员工分到一间办公室有1种分法
for(int i=;i<=n;++i)//从两个员工开始枚举,因为一个员工的情况已计算过了:dp[1][1]=1;
for(int j=;j<=i;++j)//从两间办公室开始枚举,因为i个员工分配到一间办公室的情况已计算过了:1种,i个员工最多分配到i间办公室,所以j只需枚举到i即可
dp[i][j]=(dp[i-][j-]+dp[i-][j]*j)%mod;
for(int i=;i<=m;++i)ans+=dp[n][i];//累加n个员工分配到i(i∈[1,m])间办公室的所有情况数
cout<<ans%mod<<endl;//最后取个模
}
return ;
}

ACM_数数有多少(第二类Stirling数-递推dp)的更多相关文章

  1. (转) [组合数学] 第一类,第二类Stirling数,Bell数

    一.第二类Stirling数 定理:第二类Stirling数S(p,k)计数的是把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数. 证明:元素在哪些盒子并不重要,唯一重要的是各个盒子里装的 ...

  2. lightOJ 1326 Race(第二类Stirling数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...

  3. HDU 2643 Rank:第二类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...

  4. [总结] 第二类Stirling数

    上一道例题 我们来介绍第二类Stirling数 定义 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 .和第一类Stirling数不同的是,集合 ...

  5. 第二类Stirling数

    第二类斯特林数 第二类Stirling数:S2(p, k) 1.组合意义:第二类Stirling数计数的是把p个互异元素划分为k个非空集合的方法数 2.递推公式: S2(0, 0) = 1 S2(p, ...

  6. [BZOJ5093]图的价值(NTT+第二类Stirling数)

    5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 250  Solved: 130[Submit][Sta ...

  7. LightOJ 1326 – Race 第二类Stirling数/

    简单的模板题. 题意:问n匹马出现的不同排名数. 题解:可以使用DP,本质上还是第二类Stirling数(隔板法) #include <stdio.h> #include <iost ...

  8. 第二类Stirling数初探 By cellur925

    上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验 ...

  9. 自然数幂和——第一类Stirling数和第二类Stirling数

    第一类Stirling数 首先设 $$S_k(n)=\sum_{i=0}^ni^k$$ 根据第一类斯特林数的定义(P是排列数,C是组合数,s是Stirling) $$C_n^k={P_n^k\over ...

  10. 第一类和第二类Stirling数

    做了老是忘…… 实际问题: 找维基百科.百度百科…… 第一类Stirling数 n个元素构成m个圆排列 S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m) 初始 S(0,0)=1 S(n ...

随机推荐

  1. android源码mm时的编译错误no ruler to make target `out/target/common/obj/JAVA_LIBRARIES/xxxx/javalib.jar', needed by `out/target/common/obj/APPS/xxxx_intermediates/classes-full-debug.jar'. Stop.

    瞧见没有,就因为多了这一个反斜杠,浪费了一下午时间找问题,哭了~~~~

  2. Thinkphp5.0 的实践一

    Thinkphp5.0 的实践一 tp5.0默认没有__SELF__,需要定义, define('__SELF__',strip_tags($_SERVER['REQUEST_URI'])); tp5 ...

  3. Ubuntu 16.04错误:正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/ppa.launchpad.net_t-tujikawa_ppa_ubuntu_dists_xenial_main_i18n_Translatio

    错误: 正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /va ...

  4. Cts框架解析(2)-cts调试环境的搭建

    上一篇文章中说了怎样在windows搭建cts以及执行cts进行測试.这篇文章来讲讲怎样在eclipse中配置源代码,进行debug调试. 下载 cts源代码地址:https://android.go ...

  5. openWrt 安装管理界面luci中文包

    openWrt15安装管理界面luci中文包   如果刚刷的openwrt15没有中文界面,用ssh连接路由后用opkg安装     root@bang-bang-tang:~# opkg insta ...

  6. server证书安装配置指南(Tomcat 6)

    一.   生成证书请求   1.  安装JDK 安装Tomcat须要JDK支持. 假设您还没有JDK的安装.则能够參考 Java SE Development Kit (JDK) 下载. 下载地址: ...

  7. IOS开发UI篇--一个支持图文混排的ActionSheet

    一.简单介绍 UIActionSheet是IOS提供给我们开发人员的底部弹出菜单控件.一般用于菜单选择.操作确认.删除确认等功能.IOS官方提供的下面方式对UIActionView进行实例化: - ( ...

  8. C语言++a与a++的实现机制与操作符结合优先级

    看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出推断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...

  9. jquery.validate自己定义验证--成功提示与择要提示

    1. 自己定义验证--成功提示 1) 加入选项 errorClass: "unchecked". validClass: "checked", errorEle ...

  10. struts 模块化

    <struts> <!-- 包含了三个配置文件 --> <!-- 不指定路径默认在src下时的方式 --> <include file="strut ...