hdu6568 Math (概率dp)

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=6568

题意:

在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可能发现丢失,发现概率为$q$

在$L$点如果没携带货物一定会发现,求到达$L$的期望路程

数据范围:

$1\leq L\leq 100000$

$0< p,q< 1$

分析: 

定义$dp[i]$为在$i$点丢失货物后回到$i$点的期望路程

$dp[L]=0$

$dp[i]=(1-q)\times (dp[i+1]+2)$

i-1到i的花费为$x=(1-p)+p\times(dp[i-1]+x)$

解出$x$即可

ac代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e5 + 5;
double p,q;//丢失和丢失后发现的概率
double dp[maxn];//在i点丢失后回到i点的期望路程
int main()
{
    int L;
    while(scanf("%d %lf %lf",&L,&p,&q)==3){
        dp[L]=0;
        for(int i=L-1;i>=0;i--)
            dp[i]=(1-q)*(dp[i+1]+2.0);
        double ans=0;
        for(int i=1;i<=L;i++)//i-1到i的花费为x=(1-p)+p*(dp[i-1]+x)
            ans+=((1-p)+dp[i-1]*p)/(1-p);
        printf("%.12f\n",ans);
    }
    return 0;
}

  

posted @ 2019-08-02 15:02  czh~  阅读(157)  评论(0编辑  收藏  举报