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;
}

  

转载于:https://www.cnblogs.com/carcar/p/11288626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值