HDU3265 Examining the Rooms【stirling数】
题目链接:
http://acm.hdu.edu.cn/showproblem.php?
pid=3625
题目大意:
有N个房间,每一个房间的要是随机放在某个房间内,概率同样。有K次炸门的机会。
求能打开全部房间门,进入全部房间的概率有多大。
解题思路:
门和钥匙的相应关系出现环。打开一个门后,环内的门都能够打开。
也就意味着:
N个房间的钥匙与门形成1~K个环的概率有多大。
也就是求N个元素。构成K个以内的环,且1不成自环的概率。
N个元素形成K个环的方法数是第一类stirling数 S(N。K)。
N个元素形成K个环。且1成自环的方法数是S(N-1,K-1)。
则N个元素形成K个环。且1不成自环的方法数是S(N。K) - S(N-1,K-1)。
要是随机放的总的方法数为N!。
则概率P(N,K)为( S(N,K) - S(N-1,K-1) + S(N。K-1) - S(N-1。K-2) + … +
S(N,1) - S(N。0) ) / N!
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std; LL F[25],Stirling[25][25]; void Solve()
{
F[0] = 1;
for(int i = 1; i <= 20; ++i) //阶乘数组
F[i] = i*F[i-1]; for(int i = 1; i <= 20; ++i) //算出第一类stirling数
Stirling[i][0] = 0;
Stirling[1][1] = 1;
for(int i = 1; i <= 20; ++i)
{
for(int j = 1; j <= i; ++j)
{
if(i == j)
Stirling[i][j] = 1;
else
Stirling[i][j] = Stirling[i-1][j-1] + (i-1)*Stirling[i-1][j];
}
} for(int i = 1; i <= 20; ++i) //取绝对值
{
for(int j = 1; j <= 20; ++j)
{
Stirling[i][j] = abs(Stirling[i][j]);
}
}
} int main()
{
Solve();
int T,N,K;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&N,&K);
LL sum = 0;
for(int i = 1; i <= K; ++i)
sum += Stirling[N][i] - Stirling[N-1][i-1];
printf("%.4f\n",(double)sum / (double)F[N]); //.4lf输出不了正确结果
} return 0;
}
HDU3265 Examining the Rooms【stirling数】的更多相关文章
- HDU 3625 Examining the Rooms:第一类stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任 ...
- 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Examining the Rooms(dp,斯特灵数)
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- [HDU 3625]Examining the Rooms (第一类斯特林数)
[HDU 3625]Examining the Rooms (第一类斯特林数) 题面 有n个房间,每个房间有一个钥匙,钥匙等概率的出现在n个房间内,每个房间中只会出现且仅出现一个钥匙.你能炸开门k次, ...
- lightOJ 1326 Race(第二类Stirling数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...
- 斯特灵数 (Stirling数)
@维基百科 在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的. 第一类 s(4,2)=11 第一类Stirling数是有正负的,其绝对值是个元素的项目分 ...
- hdu 4372 第一类stirling数的应用/。。。好题
/** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...
- HDU 4372 Count the Buildings:第一类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...
- 整理一点与排列组合有关的问题[组合数 Stirling数 Catalan数]
都是数学题 思维最重要,什么什么数都没用,DP直接乱搞(雾.. 参考LH课件,以及资料:http://daybreakcx.is-programmer.com/posts/17315.html 做到有 ...
随机推荐
- win10安装node/yarn报错2503/2502
当我们从node官网下载windows安装包时会得到一个msi文件,由于win10的安全策略比较严格,所以我们在右键菜单上找不到以管理员运行这个按钮: 普通的exe文件: msi文件: 解决办法: 此 ...
- BZOJ 2119 股市的预测(后缀数组)
首先要差分+离散化. 然后就是求形如ABA的串有多少,其中B的长度确定为k. 我们用到了设置关键点的思想.我们枚举A的长度L.然后在\(1,1+L,1+L*2,1+L*3...\)设置关键点.然后我们 ...
- Django之ORM的增删改查
一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...
- [CTSC2007][APIO2007]数据备份Backup
题目:BZOJ1150.codevs1615.洛谷P3620 题目大意:有n个点,k条链,每个点离原点有一定的距离.要你用k条链连接2k个点,使得k条链的长度最短. 解题思路:毕竟是CTSC级别的题目 ...
- 【转载】spring boot 链接 虚拟机(Linux) redis
原文:https://www.imooc.com/article/43279?block_id=tuijian_wz 前提是你已经安装redis且支持远程连接,redis的安装这里不再赘述,有需要的可 ...
- 题解 P2657 【[SCOI2009]windy数】
感觉数位DP有点弱,强化一下... 这道题是一道比较裸的数位DP. 我们用\(dp[i][j]\)表示长度为\(i\)最高位为\(j\)的windy数有多少个,状态转移方程为\(dp[i][j]=\s ...
- RPC架构
RPC架构 学习了: https://www.cnblogs.com/ChrisMurphy/p/6550184.html RPC架构简介,有一个Java例子: http://blog.csdn.ne ...
- hadoop-11-ambari-server安装
hadoop-11-ambari-server安装 #ambari 安装yum install ambari-servercd mysql-5.7.18/cp mysql-connector-java ...
- glm编译错误问题解决 formal parameter with __declspec(align('16')) won't be aligned
參考:http://stackoverflow.com/questions/25300116/directxxmmatrix-error-c2719-declspecalign16-wont-be-a ...
- poj--1904--King's Quest(scc建图)
King's Quest Time Limit: 15000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit ...