题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6568
题意:
在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可能发现丢失,发现概率为$q$
在$L$点如果没携带货物一定会发现,求到达$L$的期望路程
数据范围:
$1leq Lleq 100000$
$0< p,q< 1$
分析:
定义$dp[i]$为在$i$点丢失货物后回到$i$点的期望路程
$dp[L]=0$
$dp[i]=(1-q) imes (dp[i+1]+2)$
i-1到i的花费为$x=(1-p)+p imes(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 ",ans); } return 0; }