zoukankan      html  css  js  c++  java
  • sgu495:概率dp / 推公式

     概率题。。可以dp也可以推公式

     抽象出来的题目大意:

     有 n个小球,有放回的取m次  问 被取出来过的小球的个数的期望

     dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和取出的是已经被取出来过的小球的概率np[i];

     如果第 i-1 次取出的是已经被取出来过的小球 那么第 i 次取出没有取出来过小球的概率即为 dp[i-1];

     反之则为 dp[i-1] - 1/n(没有取出来过的小球少了一个)

     所以可以得到状态转移方程 dp[i]=dp[i-1]*(dp[i-1]-1/n)+np[i-1]*dp[i-1];

     还可以推公式。。不过我还是觉得 推公式 得靠人品,能yy出来那当然是极好的。。。

     代码:

    #include <iostream>
    #include <stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<string>
    #include<math.h>
    #include<ctype.h>
    using namespace std;
    #define MAXN 10000
    int n,m;
    double dp[100010];
    double np[100010];
    double solve()
    {
        double res=0;
        memset(dp,0,sizeof(dp));
        memset(np,0,sizeof(np));
        dp[1]=1;
        np[1]=0;
        for(int i=2;i<=m;i++)
        {
            dp[i]=dp[i-1]*(dp[i-1]-1.0/(double)n)+np[i-1]*dp[i-1];
            np[i]=1-dp[i];
        }
        for(int i=1;i<=m;i++)
        {
            res+=dp[i];
        }
        return res;
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            printf("%.10lf
    ",solve());
        }
        return 0;
    }


    公式。。

    #include <stdio.h>
    #include<math.h>
    double n,m;
    int main()
    {
        while(scanf("%lf%lf",&n,&m)!=EOF)
        {
            printf("%.10lf
    ",n-n*pow(((n-1)/n),m));
        }
        return 0;
    }
  • 相关阅读:
    Shiro基础
    Nginx+tomcat集群使用redis共享session
    小程序 wepy wx.createAnimation 向右滑动渐入渐出
    小程序util工具
    记错本~~
    小程序BindTap快速连续点击页面跳转多次
    微信小程序页面无法跳转
    CSS:font-family常用字体中英文对照
    git 常用指令
    js 获取数组重复的元素
  • 原文地址:https://www.cnblogs.com/oneshot/p/3999025.html
Copyright © 2011-2022 走看看