51NOD 1639 绑鞋带(组合数学 + 递推)

传送门

有n根鞋带混在一起,现在重复n次以下操作:随机抽出两个鞋带头,把它们绑在一起。可以想象,这n次之后將不再有单独的鞋带头,n条鞋带系成了一些环。那么有多大概率刚好所有这些鞋带只形成了一个环?

Input

仅一行,包含一个整数n (2<=n<=1000)。

Output

输出一行,为刚好成环的概率。

Input示例

2

Output示例

0.666667

解题思路:

考虑n根鞋带时第一个操作,只要不选到同一根鞋带,就等价变成n-1根时的情形。这样我们就可以递推了,现在假设已经有 i-1 根鞋带组成一个环了,概率认为是ans[i-1],那么现在的第 i 根鞋带就要插到这前面的i-1根鞋带中,方法数应该是2*(i-1)(2是因为鞋带的两头都可以插入),总数就是2*(i-1)+1(加上自己这跟鞋带)。所以递推公式:

ans[i]=ans[i?1]?2?(i?1)2?(i?1)+1

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        double ans = 1.0;
        for(int i=2; i<=n; i++)
            ans = ans*(i-1)*2.0/(2.0*i-1);
        printf("%.8lf\n",ans);
    }
    return 0;
}
时间: 2024-08-27 18:04:27

51NOD 1639 绑鞋带(组合数学 + 递推)的相关文章

51Nod - 1639 绑鞋带

51Nod  - 1639 绑鞋带 有n根鞋带混在一起,现在重复n次以下操作:随机抽出两个鞋带头,把它们绑在一起.可以想象,这n次之后將不再有单独的鞋带头,n条鞋带系成了一些环.那么有多大概率刚好所有这些鞋带只形成了一个环? Input 仅一行,包含一个整数n  (2<=n<=1000). Output 输出一行,为刚好成环的概率. Input示例 2 Output示例 0.666667 题解: 参考1: https://www.51nod.com/question/index.html#!q

51NOD 1149:Pi的递推式——题解

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1149 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x) Pi = 3.1415926535..... 现在给出一个N,求F(N).由于结果巨大,只输出Mod 10^9 + 7的结果即可. 不好想啊……以及我曾经打了个表,并且还找到了规律,结果过到29就gg了…… 参考:https://blog.

Light oj 1095 - Arrange the Numbers (组合数学+递推)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意: 给你包含1~n的排列,初始位置1,2,3...,n,问你刚好固定前m个数中的k个数的位置,问你有多少中排列方案.(比如5 3 2有1 4 3 2 5这种方案,1和3固定了) 思路: 前m个取k个就是C(m, k)个方案.然后就是类似错排的思想,设dp[i]为i个数在初始位置各不相同.其中的组合数用逆元算出. ans = dp[m - k] * C(n - m,

组合数学+递推式 hdu2068 RPG的错排

我的思路是这样的: 枚举正确的个数i,然后从n个位置中选择i个位置,C(n,i) 那么剩下的n-i个位置,都不是答案,我们暂时成为错位排列 现在的难点就在于,如何球错位排列 设F[i]表示i个数字,错位排列的种类数 那么,先只考虑前i-1个数字错位排列,暂时在第i个位置把数字i放上,此时是不合法的因为i第i个位置不能放i,所以要考虑把i和其他数字调换位置 在前i-1个位置中,选出一个位置,把这个位置的数字与数字i调换位置,可能的情况就有(i-1)*F[i-1] 看似情况全部考虑了,其实还有一种情

【51nod】1149 Pi的递推式

题解 我们把这个函数的递归形式画成一张图,会发现答案是到每个出度为0的点的路径的方案数 这个可以用组合数算 记录一下P[i]为i减几次PI减到4以内 如果P[i + 1] > P[i],那么转向的路径走P[i]次,否则走P[i] - 1次 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <vector> #in

「51Nod1639」绑鞋带(概率

1639 绑鞋带  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有n根鞋带混在一起,现在重复n次以下操作:随机抽出两个鞋带头,把它们绑在一起.可以想象,这n次之后將不再有单独的鞋带头,n条鞋带系成了一些环.那么有多大概率刚好所有这些鞋带只形成了一个环? Input 仅一行,包含一个整数n  (2<=n<=1000). Output 输出一行,为刚好成环的概率. Input示例 2 Output示例 0.666667 题解 考虑当前已经打了

uva 1478 - Delta Wave(递推+大数+卡特兰数+组合数学)

题目链接:uva 1478 - Delta Wave 题目大意:对于每个位置来说,可以向上,水平,向下,坐标不能位负,每次上下移动最多为1, 给定n问说有多少种不同的图.结果对10100取模. 解题思路:因为最后都要落回y=0的位置,所以上升的次数和下降的次数是相同的,并且上升下降的关系满足出栈入栈的关系.即卡特兰数. 所以每次枚举i,表示有i个上升,i个下降,用组合数学枚举出位置,然后累加求和. C(2?in)?f(i)=C(2?i?2n)?f(i?1)?(n?2?i+1)?(n?2?i+2)

hdu 4869 Turn the pokers(递推&amp;组合数学&amp;逆元)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1279    Accepted Submission(s): 466 Problem Description During summer vacation,Alice stay at home for a long time, with nothing t

UVA 10910 Marks Distribution(组合数学 或 递推)

Marks Distribution Time limit: 3.000 seconds In an examination one student appeared in N subjects and has got total T marks. He has passed in all the Nsubjects where minimum mark for passing in each subject is P. You have to calculate the number of w