UVA - 557 Burger 排列组合 概率
2015-01-13 14:37
99 查看
你题目大意:有N个孩子去吃汉堡,他们点了N个汉堡,N个汉堡中,其中N/2个是鸡腿堡,另外N/2个是牛肉堡。这N个孩子坐成了一个圈,然后抛硬币决定哪个孩子该得到哪种汉堡,每个孩子只能得一个汉堡,顺时针轮流抛硬币,正面就拿鸡腿堡,反面就拿牛肉堡,问最后两个孩子的汉堡是相同的概率
解题思路:如果直接枚举的话会很麻烦,因为有可能前面几个孩子就把其中一种汉堡全部取走了,剩下的孩子就没得选择了,只能拿另一种了,这样枚举的话比较难。那就考虑下用另一种方法,枚举最后两个小孩得到的汉堡是相同的所有情况,再用1减去这种情况就可以了。这样的话,前面的N-2个孩子有N-2个汉堡可以选择,而这N-2个汉堡中两种汉堡的种类各占一半,把其中的相同种类的汉堡分给这N-2个孩子,同种汉堡的数量2/N-1(因为已经各取出一个给最后两个孩子了),这种情况有C((N/2-1),(N-2))种,再乘上这种事件发生的概率2^(2-N),就可以得到最后两个孩子的汉堡是不相同的概率了。
即f(N) = 2^(2-N) * C((N/2-1),(N-2)),那么f(N-2) = 2^(N-4) * C((N/2-2),(N-4)),两式子相除,f(N) / f(N-2) = (N-3)/ (N-2),这样就可以递推出f(N)了
以上参考:www.cnblogs.com/staginner/archive/2011/12/13/2286151.html
解题思路:如果直接枚举的话会很麻烦,因为有可能前面几个孩子就把其中一种汉堡全部取走了,剩下的孩子就没得选择了,只能拿另一种了,这样枚举的话比较难。那就考虑下用另一种方法,枚举最后两个小孩得到的汉堡是相同的所有情况,再用1减去这种情况就可以了。这样的话,前面的N-2个孩子有N-2个汉堡可以选择,而这N-2个汉堡中两种汉堡的种类各占一半,把其中的相同种类的汉堡分给这N-2个孩子,同种汉堡的数量2/N-1(因为已经各取出一个给最后两个孩子了),这种情况有C((N/2-1),(N-2))种,再乘上这种事件发生的概率2^(2-N),就可以得到最后两个孩子的汉堡是不相同的概率了。
即f(N) = 2^(2-N) * C((N/2-1),(N-2)),那么f(N-2) = 2^(N-4) * C((N/2-2),(N-4)),两式子相除,f(N) / f(N-2) = (N-3)/ (N-2),这样就可以递推出f(N)了
以上参考:www.cnblogs.com/staginner/archive/2011/12/13/2286151.html
#include<cstdio> #define maxn 100010 double f[maxn]; void init() { f[2] = 1.0; for(int i = 4; i < maxn ; i += 2) f[i] = f[i - 2] * (i - 3) / (i - 2); } int main() { init(); int test, n; scanf("%d",&test); while(test--) { scanf("%d",&n); printf("%.4lf\n", 1 - f ); } return 0; }
相关文章推荐
- UVA 557 - Burger(概率 递推)
- UVA 557 - Burger(概率 递推)
- Burger - UVa 557 概率dp
- UVA 557 Burger——概率
- UVa 557 - Burger(概率+递推)
- UVa 557 Burger (概率+递推)
- UVa 557 (概率 递推) Burger
- [UVA557] Burger && 概率
- UVa 557 - Burger (概率)
- uva 557 - Burger(概率)
- uva557 - Burger(汉堡)
- UVA 557 Burger
- 习题10-12 UVA - 557 Burger 汉堡
- UVA 12712 Pattern Locker(简单排列组合数学题)
- Uva 580 排列组合
- UVALive 7962|Gym 101201K|Tournament Wins|概率期望|组合数求对数
- UVA 12906 Maximum Score 排列组合
- UVALive-8079 Making a Team 排列组合公式化简
- UVa 557 - Burger
- UVa 11538 Chess Queen (排列组合计数)