暴切DPのSkills?
常见的\(DP\)问题形式:
1.求某种选取方案可得的最大值、最小值
2.求某要求下的方案数
3.累计递推结果
4.数学公式、结论、期望、概率推到
5.由多部分可以组成的问题,多部分合成可得
6.背包问题及其变形
常见\(DP\)状态总结:
1.前\(i\)行的最大/最小值
2.第i行第j列之前最大/最小值
3.可以新开一个数组记录位置之间的关系,便于转移,或者优化转移 \(CF1183H\)
4.\(0/1\)表示取或不取 或者变换的方式
5.\(0/1/2/3...\)表示方向、特殊转移状态、分类讨论的情况
6.\(i,j...\)表示位置、坐标
7.选了\(j\)个/用了\(j\)个 物品数量... 时间...
8.花费、代价为\(j\)(如背包、调度类问题)
9.凑数时符合要求的子数,如符合要求的\(i+j=x\),转移时可以将\(x\)拆分为\(i,j\)两部分合成转移
10.\([i,j]\)区间的极值
11.区间\(DP\)的区间\(1\)个端点和\(1\)个断点,区间dp的精髓为区间长度的枚举
12.表示长度/高度/距离为\(i\)
13.一棵树中到节点\(u\)可达最大/小值
14.以该节点为根的子树的状态
15.表示从节点\(i\)到节点\(j\)
16.应题目要求可设计的某个特殊值的多少
17.节点的颜色\(or\)其他状态
18.关于期望\(DP\)
某一变量的概率乘以这一变量值,再求和,就是数学期望
期望\(DP\),就是根据概率分析,递推求出每个状态的期望的算法
期望\(DP\)常见的状态设法及其转移:
1、设成\(dp[i]\)表示已经完成\(i\)个,要达到目标状态的期望。也就是由i状态变成目标状态的期望。
对于这种方法,转移的时候要选择刷表法倒序枚举。(根据这个状态本身就可以理解)
2、设成\(dp[i]\)表示已经完成\(i\)个的期望。
对于这种方法,转移的时候要选择填表法正序枚举。
对于以上两种方法,很多时候可以互换。但是有些时候不能互换。需要经过具体情况灵活判断。
3、设成\(dp[i][j]\)表示\(i\)种物品选择了\(j\)个的期望。
4、设成\(dp[i][j]\)表示有\(i\)个第一种物品,\(j\)个第二种物品的期望。
对于以上两种方法,就是二维的状态转移。
切DP题的步骤总结:
1.确定状态
2.根据数据范围要求进行优化、简化状态
3.根据无后效性原则设计状态转移方程
4.由方程的需要对dp数组和需用的变量、数组进行预处理
5.由题目要求,选择、筛选需要的答案
番茄&zak语录之\(dp\):
1.对比自己与别人的思路
2.积累是创造的一大来源
3.提高熟练度
4.增加想法间的联系
5.dp的关键在于把问题拆分成若干子问题
6.启发式的题目往往会帮助拥有思维
7.掌握套路
Tips:
有时候遇到一个$DP$题,感觉状态复杂,不妨分成多个DP问题

浙公网安备 33010602011771号