[算法]概率与期望DP
前言
前两节主要针对题目分析,没时间的珂以跳过。
初步
首先举一道简单、经典的好题:
[Lightoj1038]Race to 1 Again
懒得单独写,安利一下DennyQi同学的博客:https://www.cnblogs.com/qixingzhi/p/9346307.html。
很显然很多期望题的状态是和自己有关的,怎么办呢,难道不停的搜索自己?
上面的方法显然行不通,于是我们只能简单变形一下。
很容易列出方程:
其中\(m\)表示因子个数,\(fac_n^i\)表示\(n\)的第\(i\)个因子。
鉴于要让右边消去后效性,两边同时乘以\(m\),移项即可。
再举一道稍微复杂一点的题目:
[zoj3329]One Person Game
题意简述:
有三个骰子,分别有k1, k2, k3个面。
记录一个初值为0的分数,每次掷骰子,如果三个面分别为a, b, c则分数置0,否则加上三个骰子的分数之和。
当分数大于n时结束。求游戏的期望步数。
设f[i]为当前已经获得了i分时,游戏结束的期望步数。
为了方便表示我们不妨设p[i]为投到点数为i的概率,特殊的p[0]为回到0的概率。
很容易想到如下递推:
一眼看过去大清亡了,成环了,能用高斯消元也就算了,关键是高斯消元会TLE。
我们发现我们需要求的东西只有f[0],于是我们分离常数,令f[i]=A[i]*f[0]+B[i]
那么显然我们要求的f[0]就喜闻乐见地变成了\(\frac{B[0]}{1-A[0]}\)。
显然我们只需要递推计算A与B就能求出答案(废话)。
那么稍加变形得到A,B的递推式如下
那么求A, B就变得非常简单了QAQ。
进阶
对于未知状态彻底成环又无法转化的情况,只能使用高斯消元。
咕咕咕。
技巧
1、变形递推式消去后效性
2、只求部分值可以分离常数
3、成环使用高斯消元
咕咕咕,(flag:预计本周补完)。