• CF518D Ilya and Escalator(期望DP)题解


    算法

    期望DP入坑题

    思路

    (f_{i,j})为第(i)时刻,电梯上正好有(j)人的概率,于是有:

    [left{egin{array}{}{f_{i + 1,j + 1}=f_{i,j} imes p}\{f_{i+1,j}=f_{i,j} imes (1-p)} end{array} ight. ]

    采用刷表法进行DP。边界条件:(f_{0,0}=1)

    注意:

    • 每次要额外处理(f_{i,n}),因为这一情况下不能再有人上电梯了;
    • 这样DP完以后只求出了概率,最后(Ans = sum^{n}_{i=1}{f_{t,i} imes i})
    • 由于使用了刷表法,所以时间那一维只需要循环(t-1)次!

    参考代码

    /*
     * @Author: When_C 
     * @Date: 2020-11-17 19:19:48 
     * @Last Modified by: When_C
     * @Last Modified time: 2020-11-17 19:36:01
     */
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 2010;
    
    int n,t;
    double p,f[maxn][maxn],Ans;
    
    int main(){
        scanf("%d%lf%d", &n, &p, &t);
        f[0][0] = 1;
        for(int i = 0; i < t; ++ i){
            f[i + 1][n] += f[i][n];
            for(int j = 0; j < n; ++ j){
                f[i + 1][j + 1] += f[i][j] * p;
                f[i + 1][j] += f[i][j] * (1 - p);
            }
        }
        for(int i = 1; i <= n; ++ i) Ans += f[t][i] * i;
        printf("%lf
    ", Ans);
        return 0;
    }
    
  • 相关阅读:
    c#发送邮件
    时间戳转换成时间js(年-月-日,例如“2017-04-22”)
    c# 如何读取web.config中的内容(ConfigurationManager)
    fiddler抓包软件的使用--请求头--ajax
    c#之双色球
    天干地支象法
    php之属性重载和方法重载
    c#之线程随机
    C#之参数线程
    c#线程创建
  • 原文地址:https://www.cnblogs.com/whenc/p/13996095.html
Copyright © 2020-2023  润新知