zoukankan      html  css  js  c++  java
  • luogu P3978 [TJOI2015]概率论

    看着就是要打表找规律

    使用以下代码

    for(int i=3;i<=20;i++)
      {
        int a1=0,a2=0;
        for(int j=1;j<i;j++)
          {
            for(int k=0;k<i;k++)
        	  for(int l=0;l<=j;l++)
    	        f[i][j]+=f[k][l]*f[i-k-1][j-l];
        	a2+=f[i][j],a1+=f[i][j]*j;
          }
      }
    

    可以打出表

    n   树总数 叶子总数 
    1   1     1
    2   2     2  
    3   5     6
    4   14    20
    5   42    70
    6   132   252
    7   429   924
    

    ...
    设树总数为(f_n),叶子总数为(g_n),我们可以发现$$f_n=frac {inom{2n}{n}} {n+1}$$$$g_n=nf_{n-1}$$

    我们要求的期望就是$$frac{g_n}{f_n}=frac{nf_{n-1}}{f_n}=frac{n frac {inom{2n-2}{n-1}} {n}}{frac {inom{2n}{n}} {n+1}}$$

    [=frac{inom{2n-2}{n-1}}{inom{2n}{n}}*(n+1)=...=frac{n(n+1)}{2(2n-1)} ]

    没了

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #include<ctime>
    #include<queue>
    #include<map>
    #define LL long long
    #define il inline
    #define re register
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    
    using namespace std;
    il LL rd()
    {
        re LL x=0,w=1;re char ch;
        while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
        return x*w;
    }
    double n;
    
    int main()
    {
      n=rd();
      printf("%.10lf
    ",n*(n+1)/2/(2*n-1));
      return 0;
    }
    
  • 相关阅读:
    tar (child): gzip: Cannot exec: No such file or directory
    通过应用数字格式来修复文本格式的数字
    Logback
    Transport
    nginx note
    docker note
    k8s note
    spring boot properties
    Windows 和 Linux 的文件名
    安装配置ubuntu的web项目(新)
  • 原文地址:https://www.cnblogs.com/smyjr/p/9470334.html
Copyright © 2011-2022 走看看