对于概率dp,我一直都弄得不是特别明白,虽然以前也有为了考试去突击过,但是终究还是掌握得不是很好,所以决定再去学习一遍,把重要的东西记录下来。

1.hdu4405

Description

在一个 \(1*n\) 的格子上掷色子,从 \(0\) 点出发,掷了多少前进几步,同时有些格点直接相连,即若 \(a\) ,\(b\) 相连,当落到 \(a\) 点时直接飞向 \(b\) 点。求走到 \(n\) 或超出 \(n\) 期望掷色子次数
\(n \leq 100000\)

Solution

这道题目有助于理解为什么期望通常是逆推的。
因为到达每一个格子的方案很多,但是从每一个格子出去的方案则是确定的。

2.hdu4418

Description

一个人站在编号为 \(0..n-1\) 的数轴上来回走动(假设 \(n\) 为 \(4\) ,那么,它的走动线路为 \(0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, ...\) ),以 \(p[i]\) 的概率走 \(i\) 步 \((i∈[1,m],且∑p[i]=1)\) ,给出 \(n,m\) 以及起点和终点,求出这人走到终点的期望步数。
\(n,m \leq 100\)

Solution

这个上面写得蛮详细的,我就偷一下懒吧。
博客

3.hdu4336

Description

在每包零食里面,可能有一张卡片,也可能没有。已知有总共有n张卡片,第i张的卡片出现的可能是 \(p_i\)。 问收集齐所有的卡片需要吃的零食数的期望是多少。
\(n \leq 20\)

Solution

根据全期望公式,可以得到
\[E[i]=\sum_{j \notin i} p[j]*(1+E[i|(1<<j)])+(1-\sum_{j \notin i}p[j])*(E[i]+1)\]

4.poj2151

Description

有n支参赛队,共有m道题目。组委会期望,每一个参赛队至少解决1道题目,并且冠军队,至少解决t道题目。给出每个参赛队解决每道题目的概率,求满足期望的概率为多少。
\(n \leq 1000,m \leq 30\)

Solution

不难设出这样的 \(dp\) 方程,设 \(dp[i][j][k]\) 为第 \(i\) 支参赛队伍,当前做到了第 \(j\) 道题目,一共解决了 \(k\) 道题目的概率。转移也很显然:
\[dp[i][j][k]=dp[i][j-1][k-1]*p[i][j]+dp[i][j-1][k]*(1-p[i][j])\]

然后
\[p_1=\prod_{i=1}^{n}(\sum_{j=1}^{m}dp[i][m][j])\]

\[p_2=\prod_{i=1}^{n}(\sum_{j=1}^{t-1}dp[i][m][j])\]

\[Ans=p_1-p_2\]

5.hdu4035

Description

有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,从结点1出发,开始走,在每个结点i都有3种可能:
1.被杀死,回到结点1处(概率为ki)
2.找到出口,走出迷宫 (概率为ei)
3.和该点相连有m条边,随机走一条
求:走出迷宫所要走的边数的期望值。
\(n \leq 10000\)

Solution

网上到处都是。

6.hdu4089

Description

有n个人排队等着在官网上激活游戏。Tomato排在第m个。
对于队列中的第一个人。有一下情况:
1、激活失败,留在队列中等待下一次激活(概率为p1)
2、失去连接,出队列,然后排在队列的最后(概率为p2)
3、激活成功,离开队列(概率为p3)
4、服务器瘫痪,服务器停止激活,所有人都无法激活了。
求服务器瘫痪时Tomato在队列中的位置<=k的概率
\(n \leq 2000\)

Solution

设 \(dp[i][j]\) 为当时队列中共有 \(i\) 个人排队,Tomato排在第 \(j\) 个,系统瘫痪时的他的排名小于等于 \(k\) 的概率。我们最后需要求的答案,就是 \(dp[n][m]\)

\(dp\) 方程很显然:
\[j==1:dp[i][1]=p_1*dp[i][1]+p_2*dp[i][i]+p_4*1\]

\[2 \leq j \leq k:dp[i][j]=p_1*dp[i][j]+p_2*dp[i][j-1]\]

\[+p_3*dp[i-1][j-1]+p_4*1\]

\[k<j \leq i :dp[i][j]=p_1*dp[i][j]+p_2*dp[i][j-1]+p_3*dp[i-1][j-1]\]

7.poj2096

Description

一个软件有s个子系统,会产生n种bug
某人一天发现一个bug,这个bug属于一个子系统,属于一个分类
每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n
问发现n种bug,每个子系统都发现bug的天数的期望。

Solution

dp[i][j]表示已经找到i种bug,j个系统的bug,达到目标状态的天数的期望
dp[n][s]=0;要求的答案是dp[0][0];

8.poj3744

Description

在一条路上,起点在1处。在N个点处布有地雷,\(1 \leq N \leq 10\)。地雷点的坐标范围:\([1,100000000]\)
每次有p的概率前进1步,1-p的概率前进2步。问顺利通过这条路的概率。就是不要走到有地雷的地方。

Solution

设 \(dp[i]\) 为到达 \(i\) 号点的概率。
那么很显然可以得到:
\[dp[i]=p*dp[i-1]+(1-p)*dp[i-2]\]

但是由于坐标的范围非常大,所以需要矩阵优化。

设 \(x\) 数组中保存所有地雷的坐标,矩阵为 \(S\)

所以
\[dp[x[n]+1]=\prod_{i=1}^{n}(1-S^{x[i]-x[i-1]-1})\]

最后矩阵优化就好了

9.bzoj2134

Description

一次考试,共 \(n\) 道题目,gx每道题目均做对了,可是他把答案抄到答题纸上时抄错位了:第i道题目的答案抄到了答题纸上的第i+1道题目的位置上,特别地,第n道题目的答案抄到了第1道题目的位置上。他想知道自己期望能做对几道题目。

Solution

由于一题只会对下一题产生影响且相互独立,可以考虑求出一道有a个选项的题写到有b个选项的题时的期望得分。
如果 \(a>b\),那么有 \(\frac{b}{a}\) 的概率选项在 \(1...b\) 之间,并且有 \(\frac{1}{b}\) 的概率正确,因此期望为 \(\frac{1}{a}\)
否则可以类似得到期望为 $ \frac{1}{b}$ 。因此期望就是\(\frac{1}{max(a,b)}\)

10.bzoj3450

Description

一个含有 \(o\) , \(x\) , \(?\) 的序列,分数等于所有连续的 \(o\) 的个数的平方和,\(?\) 可以成为 \(o\) 或者 \(x\) 且各有 \(0.5\) 的概率

比如 \(oo?xx\) 的话,\(?\) 是 \(o\) 的话就是 \(oooxx\) 分数为9,是 \(x\) 的话就是 \(ooxxx\) 分数为4
期望自然就是 \((4+9)/2=6.5\) 了

Solution

设 \(L\) 为当前连续 \(o\) 的长度。
那么,当遇到 \(x\) 的时候,\(L\) 归零
遇到 \(o\) 的时候, \(L\) 加一,对答案产生的贡献为 \((L+1)^2-L^2=2*L+1\)
遇到 \(?\) 的时候,以为还要乘上 \(0.5\) 的概率,所以 \(L=\frac{L+1}{2}\) 对答案的贡献为 \(\frac{2*L+1}{2}\)

11.bzoj2337 [HNOI2011]XOR和路径

Description

给你一幅无向图 , 一条路径的权值为路径上边权的异或和,你在每个点可以等概率的走向相连的点,求 \(1 \to n\) 路径权值的期望(有自环重边)
\(n \leq 100,m \leq 10000\)

Solution

因为每一位都是独立的,所以考虑按位处理,求出每一位是 \(1\) 的概率
还是按照套路设 \(f[u]\) 表示 \(u\to n\) 的路径这一位为 \(1\) 的概率, \(dg[u]\) 表示 \(u\) 的出度
那么 \(1-f[u]\) 就是 \(u\to n\) 的路径这一位为 \(0\) 的概率

\[\forall_{(u,v)\in E}\ f[u]=\frac1{dg[u]}(\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}1-f[v])\]

\[\Rightarrow\forall_{(u,v)\in E}\ dg[u]f[u]=\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}1-f[v]\]

\[\Rightarrow dg[u]f[u]-\sum_{w(u,v)=0}f[v]+\sum_{w(u,v)=1}f[v]=\sum_{w(u,v)=1}1\]

高斯消元即可
\(ans=\sum_i2^if_i[1]\)

12.bzoj3143 [HNOI2013]游走

Description

一个无向简单连通图,顶点从1编号到N,边从1编号到M。
初始时小Z在1号顶点,每一步小Z以相等的概率随机选择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z到达N号顶点时结束,总分为所有获得的分数之和。现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。
$N \leq 500 $

Solution

这道题的基本思路是,首先求出每一条边经过的概率,然后对于概率大的边分配小的编号就可以了。

如何求出每一条边的概率?
\[p(u,v)=\frac{p[u]}{cnt[u]}+\frac{p[v]}{cnt[v]}\]

如何求出每一个点的概率?
\[p[u]=\sum \frac{p[v]}{cnt[v]}\]

其中
\[p[n]=0\]

高斯消元即可。

13.bzoj4872 [六省联考2017]分手是祝愿

Description

B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,灯的下标为从 1 到 n 的正整数。每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这个灯是灭的,游戏的目标是使所有灯都灭掉。
但是当操作第 i 个开关时,所有编号为 i 的约数(包括 1 和 i)的灯的状态都会被改变。
B 每次等概率随机操作一个开关,直到所有灯都灭掉。但是如果当前局面,可以通过操作小于等于 k 个开关使所有灯都灭掉,那么他将不再随机,直接选择操作次数最小的操作方法(这个策略显然小于等于 k 步)操作这些开关。

B 君想知道按照这个策略的操作次数的期望乘以 n 的阶乘对 100003 取模之后的结果。

\(0 \leq k \leq n \leq 100000\)

Solution

设 \(dp[i]\) 为要达到全部熄灭的目标状态需要走 \(i\) 步,到需要走 \(i-1\) 步的期望步数,通过观察推理易知:这 \(i\) 步的先后顺序对答案并没有影响。
那么,不难写出转移:
\[dp[i]=\frac{i}{n}*1+(1-\frac{i}{n})*(1+dp[i+1]+dp[i])\]

化简之后,可以得到:
\[dp[i]=\frac{n+(n-i)*dp[i+1]}{i}\]

14.bzoj2830 [SHOI2012]随机树

Description


\(n \leq 100\)

Solution

对于第一个小问
设 \(dp[i]\) 为当前有 \(i\) 个叶子节点,叶子节点平均深度的期望值。

那么,可以得到
\[dp[i]=\frac{1}{i}(dp[i-1]*(i-1)+(dp[i-1]+1)*2-dp[i-1])\]

化简之后可以得到
\[dp[i]=dp[i-1]+\frac{2}{i}\]

对于第二个小问
设 \(dp[i][j]\) 为形成共有 \(i\) 个叶子节点深度为 \(j\) 的树的操作概率。枚举左右子树各有多少叶子节点就可以了。

15.bzoj5305 [HAOI2018]苹果树

Description

一棵苹果树, 树上每个结点都有恰好两个分支.每一天这棵树都会生长出一个新的结点.

第一天的时候, 果树会长出一个根结点, 以后每一天,果树会随机选择一个当前树中没有长出过结点的分支,然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边.

小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间的距离定义为从一个点走到另一个点的路径经过的边数.

现在他非常好奇, 如果 N 天之后小 G 来他家摘苹果, 这个不便度的期望 E 是多少. 但是小 C 讨厌分数, 所以他只想知道 E×N! 对 P 取模的结果, 可以证明这是一个整数.
\(n \leq 2000\)

Solution

这道题我开始乱七八糟地想了一大堆东西,但是......

答案为
\[\sum_{i=2}^{n}\sum_{size=1}^{n-i+1}size(n-size)size!C_{n-i}^{size-1}(i-1)i(n-size-1)!\]

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

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

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  2. 【bzoj4832】[Lydsy2017年4月月赛]抵制克苏恩 概率期望dp

    题目描述 你分别有a.b.c个血量为1.2.3的奴隶主,假设英雄血量无限,问:如果对面下出一个K点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输入 输入包含多局游戏. 第一行包含一个整数 T (T ...

  3. 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp

    题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...

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

    一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\ ...

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

    题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾 ...

  6. [BZOJ4832]抵制克苏恩(概率期望DP)

    方法一:倒推,最常规的期望DP.f[i][a][b][c]表示还要再攻击k次,目前三种随从个数分别为a,b,c的期望攻击英雄次数,直接转移即可. #include<cstdio> #inc ...

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

    题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 ...

  8. 【POJ 2096】Collecting Bugs 概率期望dp

    题意 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug, ...

  9. BZOJ4899: 记忆的轮廓【概率期望DP】【决策单调性优化DP】

    Description 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...

随机推荐

  1. c# 破解谷歌翻译

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 如何在 Mac上 安裝 .NET Core 2.1 ?

    一.前言 Free. Cross-platform. Open source. A developer platform for building all your apps. --- .net co ...

  3. mybatis_ The content of element type association must match (constructor,id,result,ass ociation,collection,discriminator)

    一般遇到这种问题肯定要看一看association中元素编写顺序, <resultMap id="orderRslMap" type="orders"&g ...

  4. 【Spring】使用Spring和AMQP发送接收消息(下)

    上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供 ...

  5. SpringMVC 的运行原理

    0. 灵魂的拷问   问:SpringMVC 是什么?它有什么作用?  答:SpringMVC 的全称是 Spring Web Model-View-Controller,它是 Spring Fram ...

  6. MyBatis:事务回滚

    事务的隔离级别:DEFAULT.READ_UNCOMMITED.READ_COMMITTED.REPEATABLE_READ.SERIALIZABLE 事务的传播行为:REQUIRED.SUPPORT ...

  7. Java中的深克隆和浅克隆

    为什么要克隆 首先思考一个问题, 为什么需要克隆对象? 直接new一个对象不行吗? 克隆的对象可能包含一些已经修改过的属性, 而new出来的对象的属性都还是初始化时候的值, 所以当需要一个新的对象来保 ...

  8. 10个JavaScript常见BUG及修复方法

    译者按: JavaScript语言设计太灵活,用起来不免要多加小心掉进坑里面. 原文: Top 10 bugs and their bug fixing 译者: Fundebug 为了保证可读性,本文 ...

  9. Retrieve OpenGL Context from Qt 5.5 on OSX

    In the latest Qt 5.5, the QOpenGLWidget is much better and has less bugs than the QGLWidget, but it ...

  10. Oracle 表锁与解锁

    1. 查询 Oralce 被锁定的表信息 select object_name,machine,s.sid,s.serial#from v$locked_object l,dba_objects o ...