[HDU 3625]Examining the Rooms (第一类斯特林数) 题面 有n个房间,每个房间有一个钥匙,钥匙等概率的出现在n个房间内,每个房间中只会出现且仅出现一个钥匙.你能炸开门k次,问你能进入所有房间的概率.特殊要求:不能炸1号房间的门. T组询问 T<=2000,k<=n<=2000 分析 前置知识(如果你了解斯特林数,可以跳过) 圆排列:把n个元素排在一个圆周上,如果旋转之后两个圆周上的排列一样,那么这两个排列相同 第一类斯特林数S(n,m)表示把n个不同元素构成m…
题目: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 关于这道题: 得到一把钥匙后,可以连续开的门与钥匙…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 n^2 求斯特林数就行.要减去的就是1号钥匙在1号房间的方案,即 s[ n-1 ][ m-1] . 注意是 <=m . #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ;…
题目大意 n个房间对应n把钥匙 每个房间的钥匙随机放在某个房间内,概率相同. 有K次炸门的机会,求能进入所有房间的概率 一号门不给你炸 分析 我们设\(key_i\)为第i间房里的钥匙是哪把 视作房间i向房间\(key_i\)连了一条有向边 这相当于n个点n条边,且每个点出度入度都为1 就是m个环,就是置换嘛 相当于第一类斯特林数\(\left [\begin{matrix} n\\ m \end{matrix}\right]\) 做法 一个环中炸掉一个门就可以开环中所有的门 问题转化为求环的数…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任意一扇门(不用钥匙),但你最多只能踹k次. 问你能将所有门打开的概率. 题解: · P(打开所有门) = 能打开所有门的钥匙放置情况数 / 钥匙放置的总情况数 · 钥匙放置的总情况数 = n! 那么考虑下能打开所有门的钥匙放置情况数... 由于每个房间里有且只有一把钥匙,所以如果将每个房间连向房间内…
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=3625 题目大意: 有N个房间,每一个房间的要是随机放在某个房间内,概率同样.有K次炸门的机会. 求能打开全部房间门,进入全部房间的概率有多大. 解题思路: 门和钥匙的相应关系出现环.打开一个门后,环内的门都能够打开. 也就意味着: N个房间的钥匙与门形成1~K个环的概率有多大. 也就是求N个元素.构成K个以内的环,且1不成自环的概率. N个元素形成K个环的方法数是第一类stirling数 S(N…
<题目链接> <转载于 >>> > 题目大意:有n个锁着的房间和对应n扇门的n把钥匙,每个房间内有一把钥匙.你可以破坏一扇门,取出其中的钥匙,然后用取出钥匙打开另一扇门(如果取出的钥匙能打开房门则接着打开,取出其中钥匙,如此往复,若打不开则继续破坏一扇门).最多可以破坏k(k<=n)扇门,但是编号为1的门只能用钥匙打开.求能打开所有门(被破坏或是被钥匙打开)的概率. 解题分析: 钥匙和门的关系是成环状的,打开一个门之后,该环内的所有房间都可以进入,怎么说呢,…
题目大意:有n个房间,n!个钥匙,在房间中,最多可以破k扇门,然后得到其中的钥匙,去开其它的门,但是第一扇门不可以破开,求可以打开所有门的概率. 题解:首先,建立这样的一个模型,题目相当于给出一个图,求形成1--K个环的可能性有多大.但是节点1不可以形成子环.那么首先,n个点形成1--k个环就是第一类斯特灵数的定义,但是该如何处理1的问题呢,既然算起来比较麻烦,那么正难则反,减去节点1成为自环的情况就可以了.第一类斯特林公式:S(m,n)=(m-1)*S(m-1,n)+S(m-1,n-1). #…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看可以看到b栋楼,并且高的楼会挡住低的楼. 问你这些楼有多少种排列方法. 题解: 由于高的楼会挡住低的楼,所以这些楼首先会被划分成f+b-2个区域(除去中间最高的楼),并且左边有f-1个,右边有b-1个. 对于一个区域(假设在左边),这个区域由若干栋楼组成,并且最高的楼一定在最左边. 那么,由一个区域…
/** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那么在其左边还有f-1个能看见,在其右边还有b-1个,能看见..所以可以这样将题目转化: 将除最高楼之外的n-1个楼,分成f-1+b-1 组,在最高楼左边f-1 组,在其右边b-1组,那么分成f-1+b-1 组 就是第一类Stirling数.s[n-1][f-1+b-1]..左边f-1 组,在其右边b…