期望$DP$ 方法总结
期望\(DP\) 方法总结
这个题目太大了,变化也层出不穷,这里只是我的一点心得,不定期更新!
1. 递推式问题
对于无穷进行的操作期望步数问题,一般可用递推式解决。
对于一个问题\(ans[x]\),
我们可以考虑建立逻辑转移:
\[ans[now] = Merge(\ \ Function(ans[now])\ ,\ Function(ans[other])\ \ )\]
那么我们进行移项后,
\[ans[now]\ Delete\ Function(ans[now])\ \ =\ \ Function(ans[other])\]
此时,分离了\(ans[now]\) 与\(ans[other]\), 那么就构成了递推关系。
.
然后,对于递推式,巧用 顺序枚举 与 倒序枚举, 来防止除0、溢出等问题。
比较经典的就是POJ 2096 Collecting Bugs,它的原递推式:
\(f[i][j]*(sn-ij) = Function(f[i-1][j]\ ,\ f[i][j-1]\ ,\ f[i-1][j-1])\)
我们目标状态为\(f[s][n]\),那么当\(i=s\),\(j=n\)时就会出现除0的情况。
一个比较巧妙的处理,改变状态含义,把它变为倒序处理:
\(f[i][j]*(ns-ij) = Function(f[i+1][j]\ ,\ f[i][j+1]\ ,\ f[i+1][j+1])\)
然后\(f[s][n]=0\),目标状态变为\(f[0][0]\)从而避免了除0的问题。
.
例题:[SHOI2002]百事世界杯之旅 、POJ2096 Collecting Bugs。
2. 错位相减
注意式子的特性,观察特定情况下是否可以直接算或者错位相减。
注意式子的次数是否等差,当下表值达到一定程度时是否存在特殊计算方法。
例如:
\(f[i]=f[i-1]p_b+p_a(f[i-1]+1)p_b+{p_a}^2(f[i-1]+2)p_b+....\)
那么有\(p_af[i] = p_afp_b + {p_a}^2(f[i-1]+1)p_b + {p_a}^3(f[i-1]+2)p_b+...\)
然后错位相减可得:
\((1-p_a)f[i] = p_b(f[i-1] + p_a + {p_a}^2 + {p_a}^3 + ....)\)
此时出现了等比数列,套等比数列求和即可。
一般错位相减后 各种数学公式套一波 就可以把无限变为有限 。
例题:CF908D Arbitrary Arrangement
3. 高斯消元
这个真的是套路了,大家应该都会。
对于一个\(DP\)方程式,
若所有的转移方程式都形如\(f(x) = Function_{i=1}^n f(i)\)
那么直接移项,然后把每一个转移方程式当作一个方程,高斯消元即可。
例题:[HNOI2013]游走 , [HNOI2011]XOR和路径
4. 步骤移动转移
当直接用所需状态设不出方程式的时候,考虑从当前状态移动一步的条件与概率
那么状态变为\(f[移动步数]\),
转移为\(f[step] ==(Function)==> f[step+1]\)
以这个角度思考,很有可能会出现递推式,然后套用上面所说就可解出最终答案。
例题:[六省联考2017]分手是祝愿。
5. 整数期望公式
我们设答案(整数)为\(x\),期望答案为\(E(x)\) ,\(P(x \ge i)\)表示答案大于等于\(i\)的概率,那么有:
\[E(x) = \sum_{i = 1}^∞ P(x \ge i)\]
我们同时有:\(P(i \leq x-1) + P(i \ge x) = 1\)
第一个公式中的无限看起来很吓人,但根据实际意义可以变为有限(答案不可能大于最大上限)。
用这个公式可以将求解答案变为求解后缀和或者求解前缀和。
那么就改变了\(DP\)目标,有时候就可以帮助我们设计出可以转移的状态,最后套公式得解即可。
例题:Luogu P3600 随机数生成器 (难度较大强行插入大佬的题解:戳我1、戳我2)
期望$DP$ 方法总结的更多相关文章
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- [DP优化方法之斜率DP]
什么是斜率dp呢 大概就把一些单调的分组问题 从O(N^2)降到O(N) 具体的话我就不多说了 看论文: http://www.cnblogs.com/ka200812/archive/2012/08 ...
- 动态规划_基础_最长公共子序列_多种方法_递归/dp
D: 魔法少女资格面试 题目描述 众所周知,魔法少女是一个低危高薪职业.随着近年来报考魔法少女的孩子们越来越多,魔法少女行业已经出现饱和现象!为了缓和魔法少女界的就业压力,魔法少女考核员丁丁妹决定增加 ...
- 多重集组合数 (DP)
输入: n=3 m=3 a={1,2,3} M=10000 输出: 6 (0+0+3,0+1+2,0+2+1,1+0+2,1+1+1,1+2+0) 为了不重复计数,同一种类的物品最好一次性处理好.于 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- [Swift]LeetCode639. 解码方法 2 | Decode Ways II
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- 二:状压dp
一:状压dp的基本特征 状态压缩问题一般是指用十进制的数来表示二进制下的状态 这种用一个数来表示一组数,以降低表示状态所需的维数的解题手段,就叫做状态压缩. 常用到位运算 二:位运算 &:与运 ...
- 62. Unique Paths (Graph; DP)
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- 96. Unique Binary Search Trees (Tree; DP)
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- lightoj 1381 - Scientific Experiment dp
1381 - Scientific Experiment Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lightoj.com/vo ...
随机推荐
- git 添加远程仓
1.新建远程项目 2.提交代码 $ makdir ~/hello-world //创建一个项目hello-world $ cd ~/hello-world //打开这个项目 ...
- SparkSteaming运行流程分析以及CheckPoint操作
本文主要通过源码来了解SparkStreaming程序从任务生成到任务完成整个执行流程以及中间伴随的checkpoint操作 注:下面源码只贴出跟分析内容有关的代码,其他省略 1 分析流程 应用程序入 ...
- cocos2d-x中处理touch事件
在cocos2d-x中, touch事件分为两种:一种是单点事件, 另一种是多点事件. 单点事件对应的代理方法是: virtual bool ccTouchBegan(CCTouch *pTouch, ...
- Shiro的原理及Web搭建
shiro(java安全框架) 以下都是综合之前的人加上自己的一些小总结 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的A ...
- git 域名配置
在Godaddy购买的域名: 查找DNSpod解析域名,没什么难度,就是添加一条记录,保存而已,记得在添加域名到DNSpod之后,复制两个NS地址到godaddy的域名服务器下: Git项目根目录下创 ...
- Yii2 日志处理
最近开发一个新的PHP项目,终于脱离了某框架的魔爪(之前被折磨的不轻),选用了江湖中如雷贯耳的Yii2框架.每个项目代码的运行,日志是必不可少的,在开发中踩了一遍Yii2日志管理的坑,看过很多网上对Y ...
- Android Stdio 中的Rendering Problems Android N requires the IDE to be running with Java 1.8 or later Install a supported JDK解决办法
出现如下图所示的错误 解决办法为: 然后在里面输入SDK 下载 下载APILevel为23版本的SDK 换成23版本的SDK 完美解决问题
- 快速入门vue-cli配置
作为一名使用了一段时间Vue.js的新手,相信和不少初入Vue的朋友一样,都对Vue-cli的配置一知半解.后来通过对webpack的学习,也算是对脚手架的配置有了一定的了解,所以也想把这段时间自己的 ...
- Visual Studio 环境路径答疑!
工程目录结构如下: Console │ Console.sln │ Console.VC.db │ ├─Console │ │ Console.cpp │ │ Console.vcxproj │ │ ...
- 使用SpringSecurity保护你的Eureka.
因为注册中心基本上都是自己的应用在使用,应用不是特别多,可以写死,如果应用很多,那么就写入数据库把 pom <dependency> <groupId>org.springfr ...