概率DP初学整合

本文探讨了概率和期望在信息学竞赛中的应用,重点介绍了概率DP的四个常用方法:直接计算、动态规划、迭代和概率—期望系统。通过多个实例详细解析了这些方法的使用,包括在解决概率和期望最值问题、多米诺骨牌摆放、巧克力游戏等场景下的应用。文章强调了解决这类问题需要扎实的数学基础和灵活的算法技巧。
摘要由CSDN通过智能技术生成

什么都不会的概率Dp。。。把一些好的资料收集起来慢慢看把。。。orz这些大神,蔑视我这zz垃圾

转自:http://blog.csdn.net/zy691357966/article/details/46776199

有关概率和期望问题的研究

摘要

在各类信息学竞赛中(尤其是ACM竞赛中),经常出现一些与概率和期望有关的题目。这类题目需要较高的数学水平和一定的算法技巧,必须经过仔细分析,选择合适的数学模型和算法才能顺利的解决问题。本文就对这类题目的一些常见方法进行了研究。

数学基础

这里写的数学基础是有关概率和期望的一点简单的计算法则,虽然我们都很熟悉,但是有时也可能会忘记使用,所以在这里列出来,也作为以后内容的基础。

概率的运算

Ø 两个互斥事件,发生任一个的概率等于两个事件的概率和

Ø 对于不相关的事件或者分步进行的事件,可以使用乘法原则。

Ø 对于一般情况p(A+B)=p(A)+p(B)-p(AB)

期望的运算

Ø E(φ)= ΣφiPi,这是期望的定义,其中φi是一个取值,而Pi是取这个值的概率

Ø 期望有“线性”,也就是说对于不相关的两个随机变量φ和ξ,E(φ±ξ)=E(φ)±E(ξ);E(φξ)=E(φ)E(ξ);E(φ/ξ)=E(φ)/E(ξ)

Ø 在某些情况下,期望可以表示成一个无穷的等比数列,然后利用极限的思想来求。

当然,这些只是最基础的知识,要解决好概率和期望的问题,还需要掌握一些组合数学的知识。

常用方法

方法1 直接计算

这种方法说起来很简单,就是推导出一个数学公式,然后通过程序来计算这个式子的值。这样的题目在与概率和期望有关的题目中比例不小,但是由于它们大都需要一定的组合数学基础,而一旦推导出公式,对算法的要求并不太高,而时间复杂度往往也比较低,所以这类问题不是本文的重点。有关内容可以在任何一本组合数学书中学到。

例一 百事世界杯之旅[1]

 “……在2003年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可以参加百事世界杯之旅的抽奖活动,获取球星背包、随身听,更可以赴日韩观看世界杯。还不赶快行动!……”

你关上电视,心想:假设有n个不同球星的名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?

输入输出要求

输入一个数字n,2≤n≤33,表示不同球星名字的个数。                                                            

输出凑齐所有的名字平均需要购买的饮料瓶数。如果是一个整数则直接输出。否则就用下面样例中的格式分别输出整数部分和小数部分。分数必须是不可约的。

样例输入和输出

输入

输出

2

3

5

          5

11—------

         12

17

       340463

58 -----------------

        720720



[1] 题目来源 SHTSC2002 Day 1 Prob 2

分析 这是一道比较简单的概率和期望问题。只要确定好计算方法,就可以很容易的得到公式。如果单独考虑每一名球星,那么就中了命题人的圈套。因为考虑单独的一个球星的时候所买的“没用”的饮料在考虑其他球星的时候可能会变成有用的。正确的思路是,假设现在已经有k个球星的名字,那么要使球星的名字达到k+1个平均需要买多少瓶饮料?这是很容易计算的,是n/n-k。所以我们从没有球星的名字开始,直到把所有的球星名字都凑齐,平均需要的饮料数(E)就可以计算出来:

ANS=n(1/1+1/2+1/3+....1/n)

由于题目的数据规模并不大,所以可以直接使用PASCAL的Comp或Int64(C/C++的long long)进行计算。而题目要求得到即约分数,只要在计算的时候使用分数并注意约分就可以了。

我的分析:

当有k个人的时候,抽到下一个的概率是n-k/n  所以平均需要n/n-k瓶才能买到下一个

所以ANS=n(1/1+1/2+1/3+....1/n)

这里可以用分数直接计算

如果n很多 需要关于n的近似公式  0.57721566490153286060651209 + ln(n)


方法2 动态规划

动态规划是一种应用范围很广的方法,由于概率和期望具有前面提到过的一些性质(特别是期望的定义以及期望的“线性”性质),使我们可以在概率和期望之间建立一定的递推关系,这样就可以通过动态规划来解决一些概率问题。

与其他方面的动态规划一样,合理的选择状态以及高效的状态转移方程是应用这种方法的关键,而状态的选择在这类问题中尤为重要。选择合适的状态不仅可以提高效率,而且可以保证动态规划所必须的无后效性。而动态规划的各种优化方法也可以应用。

概率和期望的最值问题也往往使用动态规划的方法来解决。

例二 多米诺骨牌[1]

你试图把一些多米诺骨牌排成直线,然后推倒它们。但是如果你在放骨牌的时候不小心把刚放的骨牌碰倒了,它就会把相临的一串骨牌全都碰倒,而你的工作也被部分的破坏了。

比如你已经把骨牌摆成了DD__DxDDD_D的形状,而想要在x这个位置再放一块骨牌。它可能会把左边的一块骨牌或右边的三块骨牌碰倒,而你将不得不重新摆放这些骨牌。

这种失误是无法避免的,但是你可以应用一种特殊的放骨牌方法来使骨牌更多的向一个方向

分析

首先应该明确怎样找到最佳的摆放策略。我们可以考虑在位置i放最后一块骨牌。显然,i前面的i-1块骨牌和i后面的n-i块骨牌是互不影响的。所以我们假设摆放i-1块骨牌需要的次数平均是(或说期望是)E1,摆放n-i块骨牌需要的次数平均是E2。那么我们摆放了这两段之后,就要把最后一块放上。这时如果把左边的碰倒了,就只好重新摆放。右边的也是同样的道理。所以需要摆放的平均值(E)是:

E = E+ E +

这个式子的推导并不困难,方法之一就是应用方程的思想(参见后面介绍的概率—期望系统)。

既然得到了这个式子,我们就可以通过动态规划来得到最优的摆放方案。设Ei是摆放i块骨牌所需要的最少期望次数,那么状态转移方程是:

Ei ­= min{E+ Ei-1-k­ + } (0≤k≤i-1)

这样就得到了一个O(n2)的算法。根据题目中的数据规模,最大的运算量是100*1000= 108

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值