Dotcpp  >  编程教程  >  动态规划  >  什么是概率DP?

什么是概率DP?

点击打开在线编译器,边学边练

一、概率DP

顾名思义,概率DP就是动态规划求概率的问题。一般来说,我们将dp数组存放的数据定义为到达此状态的概率,那么我们初值设置就是所有初始状态概率为1,最终答案就是终末状态dp值了。

我们在进行状态转移时,是从初始状态向终末状态顺推,转移方程中大致思路是按照当前状态去往不同状态的位置概率转移更新DP,且大部分是加法。


二、期望DP

用于求解期望的DP。这类问题一般将dp数组存放的数据定义为到达终态还需要的期望值。那么初值设置就是终末状态期望为0,答案就是初始状态的dp值了。

我们在进行状态转移时,一般是从终末状态逆推到起始状态,转移方程大致思路是找到当前状态所有可以转移到的状态,将它们的期望依概率相加即可。这是对于不同行动有概率的情况,比如投骰子。但对于多种情况互斥可选的时候(一般题目会告知你取最优策略),比如飞行棋投骰子/钻隧道二选一移动,这时可能就需要取max或min来转移了。


三、总结的规律:

1. 期望可以分解成多个子期望的加权和,权为子期望发生的概率,即 E(aA+bB+…) = aE(A) + bE(B) +…+1;

2. 期望从后往前找,一般dp[n]=0,dp[0]是答案;

3. 解决过程,找出各种情况乘上这种情况发生的概率,求和。


知识点标签:动态规划


本文固定URL:https://www.dotcpp.com/course/995

上一课:

计数DP实例讲解

下一课:

概率DP实例讲解

算法竞赛教程
第一章 算法基础
第二章 搜索算法
第三章 排序算法
第四章 字符串相关
第五章 数学相关
第六章 动态规划
第七章 数据结构
第八章 图论
第九章 计算几何
第十章 其他算法
Dotcpp在线编译      (登录可减少运行等待时间)