题目链接:
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;
}