期望

\(x\) 的期望 \(E(x)\) 表示平均情况下 \(x\) 的值。

令 \(C\) 表示常数, \(X\) 和 \(Y\) 表示两个随机变量。

  • \(E(C)=C\)

  • \(E(C \times X)=C \times E(X)\)

  • \(E(X+Y)=E(X)+E(Y)\) 期望的线性性

  • \(E(XY)\) 不一定等于 \(E(X) \times E(Y)\)

期望练习:

题意:

\(n\) 个格子从左往右排成一排,\(m\) 次操作。

每次操作随机选择一个区间 \([l,r]\) ,将里面所有格子涂黑。

求 \(m\) 次操作完毕后,被涂黑的格子数量的期望。

\(solution\):

期望的线性性,答案等于每个格子被涂黑的概率之和。

对于某个格子,假设一次操作涂黑它的概率为 \(p\) ,则 \(m\) 次操作涂黑它的概率为 \(1-(1-p)^m\)。


期望(概率)DP

题意:

\(n\) 个点 \(m\) 条边的有向无环图,保证 \(1\) 可以到达每个点,且每个点可以到达 \(n\) 号点。如果现在在 \(x\) ,\(x\) 连了 \(d\) 条边出去,那么会以 \(\dfrac{1}{d}\) 的概率随机选择一条边走过去

求 \(1\) 游走到 \(n\) 的期望步数。

$n \le 100000 $ ,\(m \le 200000\)

\(solution\) :

记忆化搜索。

设 \(e[x]\) 表示 \(x\) 走到 \(n\) 的期望步数。

\[e[n]=0
\]
\[e[x]= 1 + \dfrac{\sum_{y}^{y \in son[x]}e[y]}{d[x]}
\]

复杂度:\(O(n + m)\) 。

$\texttt{code}$
void dfs(ll x)
{
if(dp[x]!=-1) return;
ll cnt=0;
for(ll i=hea[x];i;i=nex[i])
{
dfs(ver[i]);
cnt+=dp[ver[i]];
}
dp[x]=(cnt*inv[x]+1)%mod;
} for(ll i=1;i<=m;i++)
{
u=rd(),v=rd();
add(u,v),outd[u]+=1;
}
for(ll i=1;i<=n;i++) inv[i]=Pow(outd[i],mod-2);
dfs(1);
printf("%lld\n",dp[1]);

题意:

\(n\) 个点 \(m\) 条边的有向无环图,保证 \(1\) 可以到达每个点,且每个点可以到达 \(n\) 号点。如果现在在 \(x\) ,\(x\) 连了 \(d\) 条边出去,那么会以 \(\dfrac{1}{d+1}\) 的概率随机选择一条边走过去,或者以 \(\dfrac{1}{d+1}\) 的概率待在 \(x\) 点不动

求 \(1\) 游走到 \(n\) 的期望步数。

\(n \le 100000\) ,\(m \le 200000\)

\(solution\) :

\[e[x]=\dfrac{e[x]+\sum_{y}^{y \in son[x]}{e[y]}}{d[x]+1}+1
\]

有 \(e[x]\) 怎么办?化简!

\[e[x] \times (d[x]+1)=e[x]+d[x]+1+\sum_{y}^{y \in son[x]}{e[y]}
\]
\[e[x] \times d[x]=d[x]+1+\sum_{y}^{y \in son[x]}{e[y]}
\]

结论:

\[e[x]=\dfrac{d[x]+1+\sum_{y}^{y \in son[x]}{e[y]}}{d[x]}
\]

复杂度:\(O(n+m)\) 。

$\texttt{code}$
void dfs(ll x)
{
if(dp[x]!=-1) return;
ll cnt=0;
for(ll i=hea[x];i;i=nex[i])
{
dfs(ver[i]);
cnt+=dp[ver[i]];
}
dp[x]=(cnt+outd[x]+1)*inv[x]%mod;
} for(ll i=1;i<=m;i++)
{
u=rd(),v=rd();
add(u,v),outd[u]+=1;
}
for(ll i=1;i<=n;i++) inv[i]=Pow(outd[i],mod-2);
dfs(1);
printf("%lld\n",dp[1]);

题意:

\(n\) 个点 \(m\) 条边的有向无环图,保证 \(1\) 可以到达每个点,且每个点可以到达 \(n\) 号点。如果现在在 \(x\) ,\(x\) 连了 \(d\) 条边出去,那么会以 \(\dfrac{1}{d+1}\) 的概率随机选择一条边走过去,或者以 \(\dfrac{1}{d+1}\) 的概率回到 \(1\) 号点

求 \(1\) 游走到 \(n\) 的期望步数。

\(n \le 100000\) ,\(m \le 200000\)

\(solution\) :

\[e[x]=\dfrac{e[1]+\sum_{y}^{y \in son[x]}{e[y]}}{d[x]+1}+1
\]

有 \(e[1]\) 怎么办?另外定义转移方程!

设:

\[e[x]=f[x] * e[1]+g[x]
\]

则有:

\[e[1]=\dfrac{g[x]}{1-f[x]}
\]

带入转移方程式:

\[e[x]=\dfrac{e[1]+\sum_{y}^{y \in son[x]}{e[y]}}{d[x]+1}+1
\]
\[e[x] = \dfrac{e[1]+\sum_{y}^{y \in son[x]}{(f[y] \times e[1] + g[y])}}{d[x]+1}+1
\]
\[e[x] = \begin{pmatrix}\dfrac{e[1]+\sum_{y}^{y \in son[x]}{f[y] \times e[1]}}{d[x]+1}\end{pmatrix} + \begin{pmatrix}1+\dfrac{\sum_{y}^{y \in son[x]}{g[y]}}{d[x]+1}\end{pmatrix}
\]
\[e[x] = \begin{pmatrix}\dfrac{1+\sum_{y}^{y \in son[x]}{f[y]}}{d[x]+1}\end{pmatrix} \times e[1] + \begin{pmatrix}1 + \dfrac{\sum_{y}^{y \in son[x]}{g[y]}}{d[x]+1} \end{pmatrix}
\]

因为 \(e[x]=f[x] * e[1]+g[x]\) ,所以最终可以得出结论:

\[f[x] = \dfrac{1+\sum_{y}^{y \in son[x]}{f[y]}}{d[x]+1}
\]
\[g[x] = 1 + \dfrac{\sum_{y}^{y \in son[x]}{g[y]}}{d[x]+1}
\]
\[e[1]=\dfrac{g[x]}{1-f[x]}
\]

带入求值即可。

$\texttt{code}$
void dfs(ll x)
{
if(f[x]!=-1) return;
ll cntf=0,cntg=0;
for(ll i=hea[x];i;i=nex[i])
{
dfs(ver[i]);
cntf+=f[ver[i]];
cntg+=g[ver[i]];
}
f[x]=(cntf+1)*inv[x]%mod;
g[x]=(cntg*inv[x]%mod+1ll)%mod;
} for(ll i=1;i<=m;i++)
{
u=rd(),v=rd();
add(u,v),outd[u]+=1;
}
for(ll i=1;i<=n;i++) inv[i]=Pow(outd[i]+1,mod-2);
dfs(1);
printf("%lld\n",g[1]*Pow(((1-f[1]+mod)%mod+mod)%mod,mod-2)%mod);

其他习题

P1850 换教室

状态:设 \(dp[i][j][0/1]\) 来表示当前为第 \(i\) 个阶段,连同这一次已经用了 \(j\) 次换教室的机会,当前这次换 \((1)\) 不换 \((0)\) 的最小期望路程总和。

转移:

  • 转移 \(dp[i][j][0]\) :
dp[i][j][0]=fmin
(
dp[i-1][j][0] + dis[c[i-1]][c[i]], dp[i-1][j][1] + p[i-1]*dis[d[i-1]][c[i]] + (1.0-p[i-1])*dis[c[i-1]][c[i]]
);
  • 转移 \(dp[i][j][1]\) :
dp[i][j][1]=fmin
(
dp[i-1][j-1][0] + p[i]*dis[c[i-1]][d[i]] + (1-p[i])*dis[c[i-1]][c[i]], dp[i-1][j-1][1] +
p[i-1]*p[i]*dis[d[i-1]][d[i]] + p[i-1]*(1-p[i])*dis[d[i-1]][c[i]] +
(1-p[i-1])*p[i]*dis[c[i-1]][d[i]] + (1-p[i-1])*(1-p[i])*dis[c[i-1]][c[i]]
);

难点:因为在上一次换教室时是 概率 交换,所以不一定会换,所以要把两种情况的都加上(上面写了)。

$\texttt{code}$
memset(dis,inf,sizeof(dis));
for(int i=1;i<=v;i++) dis[i][i]=0;
int x,y,eg;
for(int i=1;i<=e;i++) x=rd(),y=rd(),eg=rd(),dis[x][y]=dis[y][x]=min(dis[x][y],eg);
for(int k=1;k<=v;k++) for(int i=1;i<=v;i++) for(int j=1;j<=v;j++)
dis[i][j]=dis[j][i]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) for(int k=0;k<=1;k++) dp[i][j][k]=1.0*inf;
dp[1][0][0]=dp[1][1][1]=0;
for(int i=2;i<=n;i++)
{
for(int j=0;j<=min(i,m);j++)
{
dp[i][j][0]=fmin
(
dp[i-1][j][0] + dis[c[i-1]][c[i]],
dp[i-1][j][1] + p[i-1]*dis[d[i-1]][c[i]] + (1.0-p[i-1])*dis[c[i-1]][c[i]]
);
if(j!=0) dp[i][j][1]=fmin
(
dp[i-1][j-1][0] + p[i]*dis[c[i-1]][d[i]] + (1-p[i])*dis[c[i-1]][c[i]], dp[i-1][j-1][1] +
p[i-1]*p[i]*dis[d[i-1]][d[i]] + p[i-1]*(1-p[i])*dis[d[i-1]][c[i]] +
(1-p[i-1])*p[i]*dis[c[i-1]][d[i]] + (1-p[i-1])*(1-p[i])*dis[c[i-1]][c[i]]
);
}
}
ans=1.0*inf;
for(int j=0;j<=m;j++) for(int k=0;k<=1;k++) ans=fmin(ans,dp[n][j][k]);
printf("%.2lf\n",ans);

P3750 [六省联考2017]分手是祝愿

先考虑求出最小操作次数 \(c\) 。

考虑从大到小枚举 \(n\) 盏灯,若当前这盏灯是亮的,那么求将这盏灯熄灭,并更新左右它的约数。

若初始局面需要的最小操作次数小于等于 \(k\) ,显然操作次数为最小操作次数。

我们可以预处理出 \(dp(i)\) 表示有 \(i\) 个选择变为 \(i-1\) 个选择的最小操作次数。

则转移为:

\[dp(i)=\dfrac{i}{n}+\left(1-\dfrac{i}{n}\right)\times(1+dp(i)+dp(i+1))
\]

化简得:

\[dp(i)=1+\dfrac{(n-i)\times(dp(i+1)+1)}{i}
\]

则最终答案期望为:

\[k+\sum_{i=k+1}^{c}dp(i)
\]

别忘了最终答案乘上 \(n!\) 。

$\texttt{code}$
n=rd(),k=rd();
for(int i=1;i<=n;i++) if(rd()) b[i]=true;
for(ll i=1;i<=n;i++) for(ll j=i;j<=n;j+=i) yue[j].pb(i);
for(int i=n;i>=1;i--) if(b[i])
{
for(int j:yue[i]) b[j]^=1;
cnt++;
}
if(cnt<=k) ans=cnt;
else
{
dp[n]=1;
for(ll i=n-1;i>=1;i--)
dp[i]=(1ll+(1ll*n-i)*(dp[i+1]+1ll)%mod*ksm(i,mod-2)%mod)%mod;
for(int i=k+1;i<=cnt;i++) ans=(ans+dp[i])%mod;
ans=(ans+k)%mod;
}
for(ll i=1;i<=n;i++) ans=ans*i%mod;
printf("%lld\n",ans);

期望 概率DP的更多相关文章

  1. HDU 3853 期望概率DP

    期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] ,  右移:[x][y ...

  2. 【BZOJ 3652】大新闻 数位dp+期望概率dp

    并不难,只是和期望概率dp结合了一下.稍作推断就可以发现加密与不加密是两个互相独立的问题,这个时候我们分开算就好了.对于加密,我们按位统计和就好了;对于不加密,我们先假设所有数都找到了他能找到的最好的 ...

  3. 【BZOJ 3811】玛里苟斯 大力观察+期望概率dp+线性基

    大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率 ...

  4. 【NOIP模拟赛】黑红树 期望概率dp

    这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...

  5. BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp

    首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...

  6. 期望概率DP

    期望概率DP 1419: Red is good ​ Description ​ 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 ...

  7. UVa 11427 Expect the Expected (数学期望 + 概率DP)

    题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...

  8. Hello 2019 D 素因子贡献法计算期望 + 概率dp + 滚动数组

    https://codeforces.com/contest/1097/problem/D 题意 给你一个n和k,问n经过k次操作之后留下的n的期望,每次操作n随机变成一个n的因数 题解 概率dp计算 ...

  9. 【BZOJ 3925】[Zjoi2015]地震后的幻想乡 期望概率dp+状态压缩+图论知识+组合数学

    神™题........ 这道题的提示......(用本苣蒻并不会的积分积出来的)并没有 没有什么卵用 ,所以你发现没有那个东西并不会 不影响你做题 ,然后你就可以推断出来你要求的是我们最晚挑到第几大的 ...

  10. BZOJ2337: [HNOI2011]XOR和路径 期望概率dp 高斯

    这个题让我认识到我以往对于图上期望概率的认识是不完整的,我之前只知道正着退还硬生生的AC做过的所有图,那么现在让我来说一下逆退,一般来说对于概率性的东西都只是正推,因为有了他爸爸才有了他,而对于期望性 ...

随机推荐

  1. [转]SpringBoot系列——花里胡哨的banner.txt

    Creating ASCII Text Banners from the Linux Command Line In Ubuntu, Debian, Linux Mint etc. $ sudo ap ...

  2. 第七章:网络优化与正则化(Part2)

    文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正则化(Part2) 7.3 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...

  3. Java基础系列(41)- 冒泡排序

    冒泡排序 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知 我们看到的嵌套循环,应该立马就可以得出这个算法的时间复 ...

  4. php 日期相关的类 DateInterval DateTimeZone DatePeriod

    * DateInterval <?php /** * Created by PhpStorm. * User: Mch * Date: 7/18/18 * Time: 21:30 */ $dat ...

  5. HTML 网页开发、CSS 基础语法——十.CSS语法

    CSS代码书写位置 • CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明 1.内联式 ① 内联式简介 •内联式,也被习惯叫做行内式. •书写位置:在 HTML 标签之上的 style 属性 ...

  6. 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里 | 百篇博客分析OpenHarmony源码 | v15.03

    百篇博客系列篇.本篇为: v15.xx 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分 ...

  7. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

  8. Android 开发进程 0.35 升级编译版本Android12

    Android12升级 工作需要升级到编译版本31 在这里记录一下遇到的问题. 错误:Manifest merger failedManifest merger failed 这个问题通常搜到的答案是 ...

  9. 设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。

    题目:设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 .写出程序. 代码实现 public class ThreadTest{ private int j; c ...

  10. Linux系统安装MySql5.7并通过sql脚本导入数据

    为了下载到的MySQL版本和目标系统相互兼容,在开启之前,最好了解目标系统的相关信息. 查询系统版本: cat /etc/issue 查看系统位数 getconf LONG_BIT 选择MySQL 根 ...