2017乌鲁木齐区域赛A(动态规划,组合数学,期望)

Posted ldudxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017乌鲁木齐区域赛A(动态规划,组合数学,期望)相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
double c[110][110];
double g[110];
double dp[110][110];
int n,m,k;
void cnm()
{
    c[0][0]=1;
    for(int i=1;i<=100;i++)
    {
        c[i][0]=1;
        c[i][i]=1;
        for(int j=1;j<i;j++)
        {
            c[i][j]=c[i-1][j-1]+c[i-1][j];//组合数挑选硬币可能的数量
        }
    }
}
void gailv()//预处理i枚向上的概率
{
    g[0]=1;
    for(int i=1;i<=100;i++)
        g[i]=g[i-1]/2;
}
int main()
{
    cnm();
    gailv();
    int t;
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        memset(dp,0,sizeof(dp));
        scanf("%d%d%d",&n,&m,&k);
        dp[0][0]=1;
        for(int j=0;j<m;j++)
        {
            for(int l=0;l<=n;l++)
            {
                for(int p=0;p<=k;p++)//抛k枚硬币有p枚向上
                {
                    if(k+l<=n)//原本向上的枚数加上这次向上的枚数不超过n
                    {
                        dp[j+1][l+p]+=dp[j][l]*c[k][p]*g[k];
                    }
                    else//超过n的话就会有已经向上的被重抛,导致向上的概率变低
                    {
                        dp[j+1][n+p-k]+=dp[j][l]*c[k][p]*g[k];
                    }
                }
            }
        }
        double sum=0;
        for(int i=1;i<=n;i++)
        {
            sum+=dp[m][i]*i;//概率乘上权值
        }
        printf("%.3f ",sum);//切勿使用%.3lf
    }
    return 0;
}
 





























































以上是关于2017乌鲁木齐区域赛A(动态规划,组合数学,期望)的主要内容,如果未能解决你的问题,请参考以下文章

2017乌鲁木齐区域赛K(容斥原理求指定区间内与n互素的数的个数)

欧拉公式 大组合数 2017 ICPC 乌鲁木齐 D Fence Building

乌鲁木齐icpc2017网络赛DI题

2017icpc 乌鲁木齐网络赛

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-A banana·

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛