【xsy1528】azelso - 概率期望dp

北京集训的题都是好题啊~~(于是我爆0了)

注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了。。。

设$f_i$表示从$i$出发不回到$i$直接到达终点的概率,显然期望步数就是$\frac{1}{f_i}$;

考虑转移,设下一个事件概率为$p$,则

如果下一个事件是敌人:$f_i=f_{i+1}*p$

如果下一个事件是旗子:$f_i=(1-p)*(1-f_{i+1})*(1+p*(1-f_{i+1})+p^2*(1-f_{i+1})^2+\cdots )=\frac{(1-p)*(1-f_{i+1})}{1-p*(1-f_{i+1})}$

第二个式子的表示的是下一次被打死并且没拿到旗子的概率;

但是还有一点小问题:$1-p*(1-f_{i+1})$可能为0

稍微变形一下:$\frac{f_{i+1}}{p}=(1-p)*f_{i+1}+p$

代码:

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 #define inf 2147483647
 8 #define eps 1e-9
 9 #define mod 1000000007
10 using namespace std;
11 typedef long long ll;
12 ll h,n,ans,p[100001],a,b,f[100001],inv[100001],op[100001];
13 char ord[3];
14 ll fastpow(ll x,ll y){
15     int ret=1;
16     for(;y;y>>=1,x=x*x%mod){
17         if(y&1)ret=ret*x%mod;
18     }
19     return ret;
20 }
21 int main(){
22     scanf("%lld%lld",&h,&n);
23     for(int i=1;i<=n;i++){
24         scanf("%s",ord);
25         if(ord[0]==‘F‘)op[i]=0;
26         else op[i]=1;
27         scanf("%lld%lld%lld",&p[i],&a,&b);
28         inv[i]=a*fastpow(b,mod-2)%mod;
29     }
30     f[n]=1;
31     ans=h-p[n];
32     for(int i=n-1;i>=0;i--){
33         if(op[i+1])f[i]=f[i+1]*fastpow(inv[i+1],mod-2)%mod;
34         else f[i]=((mod+1-inv[i+1])*f[i+1]%mod+inv[i+1])%mod;
35         ans=(ans+(p[i+1]-p[i]+mod)%mod*f[i]%mod)%mod;
36     }
37     printf("%lld",ans);
38     return 0;
39 }

原文地址:https://www.cnblogs.com/dcdcbigbig/p/9639551.html

时间: 2024-07-31 18:08:29

【xsy1528】azelso - 概率期望dp的相关文章

【BZOJ-1419】Red is good 概率期望DP

1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Discuss] Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一行输入两个数R,B,其值在0到5000之间 Output 在最优策略下平均能得到多少钱

CF148D--Bag of mice+概率期望dp

第一道概率期望dp:) 其实和一般的dp也差不多,只要状态选好就行了. 定义dp[i][j]表示还剩i只白老鼠j只黑老鼠时候公主赢得概率. 则:1.公主选白老鼠,直接赢,概率:i/(i+j) 2.公主选黑老鼠 1)龙选黑老鼠,逃走黑老鼠:概率:j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2) 2)  龙选黑老鼠,逃走白老鼠:概率:j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2) 3) 龙选白老鼠,这样公主是必输的,不用考虑 然后dp[i][j]等于以上概率之和

Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp

一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\) 表示第 \(i\) 个格子期望经过多少次,所以 \(dp_{n+1}=1\). https://www.cnblogs.com/suncongbo/p/11996219.html 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/12063633.ht

Codeforces 908 D.New Year and Arbitrary Arrangement (概率&amp;期望DP)

题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾添加字母b,当出现≥k个ab子串时立即停止添加字母,求最后期望的ab子串个数.(子串ab不要求连续) 例子:当k=1,aab含2个ab,bbabbab时不可能出现的,因为到了bbab就会停止添加字母. 题解: 期望DP DP果然是智商的分界线 orz @.@#,这题题意其实我也没看太懂,后来看了别人

LightOJ 1030 Discovering Gold (概率/期望DP)

题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 \times N\) grid. Each cell of the cave can contain any amount of gold. Initially you are in position \(1\). Now each turn you throw a perfect \(6\) s

hdu4405--Aeroplane chess+概率期望dp

首先推荐一篇很好的如何概率期望问题的入门文章:点击打开链接 昨天比赛的时候面对这道题的第一想法是依照数学期望的定义来做,即依次求出某个点扔i次骰子能到达n点的概率,然后由期望的定义就可以求出答案了.但显然这在程序上是不可能实现的. 今天看了那篇文章后才知道自己的想法是大错特错的;求解这种问题应该采用一种递推的思路,即每次只考虑一次转移后当前状态的期望,然后我们依次考虑每个节点就可以得到一个方程组,然后就只需要求解这个方程组就行了. 当然对于如何求解这个方程组,我们可以采用高斯消元法,当然如果这个

【POJ 2096】Collecting Bugs 概率期望dp

题意 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug,需要的天数的期望. 分析 计算期望E=∑所有可能需要的天数*概率 找到s个系统n种bug,需要最少max(s,n)天,而可能的天数是无穷的,这样计算很复杂,复杂到算不了. 所以考虑dp,期望E=∑(昨天可以转移到现在状态的所有可能的情况的期望+1)*概率=∑(昨天可以转移到现在状态的所有可能的情况的

华南理工大学“三七互娱杯”程序设计竞赛 HRY and codefire(概率期望DP)

https://ac.nowcoder.com/acm/contest/874/A 题目:有两个账号 , 一开始都为0级 , 求任意一个账号升级到N的期望 要求:如果当前账号嬴了 , 就继续沿用当前的账号,否则就更换其他账号,第i级嬴的概率是pi; 官方题解 因为dp[i][j] 涉及到 dp[j][i] 的价值 ,如果单纯的只是用一条式子是无法得出dp[i][j]的价值 , 应为这是从后开始计算的 , dp[j][i]还没有被计算到 ,所以必须需要两条方程 , 单纯的两条也是不行 , 因为dp

poj3071Football(概率期望dp)

Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5620   Accepted: 2868 Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2n. In each round of the tournament, all teams still in the