zoukankan      html  css  js  c++  java
  • CoderForces 518D Ilya and Escalator (期望DP)

    题意:给定 n 个人,在每一时刻一个人进入地铁的概率是 p,站着不动的概率是 1-p,然后问你 t 时间地铁里有多少人。

    析:很明显这是一个期望DP,用d[i][j]表示 i 时刻 j 个人进入地铁的概率,有两种情况,要么第 i-1 时刻已经有 j 个人了,那么就不进,要么第 i-1 时刻只有 j-1个人,就得进入,

    也就是d[i][j] = d[i-1][j] * (1-P) + d[i-1][j-1] * p;这就是状态转移方程,最重要的是有一种情况一定要注意。。。那就是当第 i-1 时刻已经进入 n 个人了,也就是说全部的人都已经进入了,

    那么第 i 时刻就不用考虑了,也就是说 d[i][n] = d[i-1][n] + d[i][n-1] * p;这个要特别注意。

    代码如下:

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    const int maxn = 2e3 + 5;
    double d[maxn][maxn];
    
    int main(){
        int n, t;
        double p;
        while(scanf("%d %lf %d", &n, &p, &t) == 3){
            d[0][0] = 1.0;
            for(int i = 1; i <= t; ++i){
                for(int j = 0; j <= i; ++j)
                    d[i][j] = d[i-1][j] * (1.0-p) + d[i-1][j-1] * p;
                d[i][n] = d[i-1][n] + d[i-1][n-1] * p;//特判第 i-1 时刻已经进入 n 个人了
            }
    
            double ans = 0.0;
            for(int i = 0; i <= n; ++i)  ans += d[t][i] * i;
            printf("%.6lf
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    Linux下使用mtr做路由图进行网络分析
    PHP使用AJAX返回登录成功信息完整参考代码
    ajax提交表单数据不跳转
    帝国cms常用变量总结
    2020软件工程作业04
    2020软件工程作业03
    疑问
    2020软件工程02
    疑问
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5649854.html
Copyright © 2011-2022 走看看