zoukankan      html  css  js  c++  java
  • Codeforces 28C [概率DP]

    /*
    大连热身D题
    题意:
    有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室。
    每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队。
    求所有浴室中最长队伍的期望。
    
    思路:
    概率dp dp[i][j][k]代表前i个浴室有j个人最长队伍是k的概率。
    枚举第i个浴室的人数。然后转移的时候其实是一个二项分布。
    
    */
    
    
    #include<bits/stdc++.h>
    using namespace std;
    int jilu[55];
    double dp[55][55][55];
    double C[55][55];
    void init() {
        C[0][0] = 1;
        for ( int i = 1; i <= 50; i++ )
        {
            C[i][0] = 1;
            for (int j = 1; j <= i; j++)
                C[i][j] = C[i-1][j-1] + C[i-1][j];
        }
    }
    int main()
    {
        int n,m;
        init();
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)scanf("%d",jilu+i);
        dp[0][0][0]=1;
        for(int i=1;i<=n;i++){
            for(int j=0;j<=m;j++){
                for(int k=0;k<=m;k++){
                    for(int c=0;c<=j;c++){
                        if(c<=(k-1)*jilu[i]){
                            dp[i][j][k]+=dp[i-1][j-c][k]*C[j][c]/pow(i,j)*pow(i-1,j-c);
                        }
                        else if(c<=k*jilu[i]){
                            for(int w=0;w<=k;w++){
                                dp[i][j][k]+=dp[i-1][j-c][w]*C[j][c]/pow(i,j)*pow(i-1,j-c);
                            }
                        }
                        else break;
                    }
                }
            }
        }
        double ans=0;
        for(int i=1;i<=m;i++){
            ans+=i*dp[n][m][i];
        }
        printf("%.12lf
    ",ans);
    }
  • 相关阅读:
    通过w3c方式 读取xml内容
    ssm项目 maven 项目pon.xml 配置
    myeclipse 2014新建maven web 项目步骤
    Maven学习
    常用正则学习
    Maven 那点事儿
    Chrome 里的请求报错 " Provisional headers are shown"
    php框架thinkphp3.2.3 配置文件bug
    $_GET $_POST $_REQUEST
    php检测函数
  • 原文地址:https://www.cnblogs.com/tun117/p/6002049.html
Copyright © 2011-2022 走看看