从集合的角度思考DP问题
Posted a-sc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从集合的角度思考DP问题相关的知识,希望对你有一定的参考价值。
从集合的角度思考DP问题
如上图展示了DP问题思考的一个简单步骤来自y总直播,“就像计算乘法一样,学会分析DP问题就像学会列竖式一样,让处理DP问题更简单”这就话让我瞬间意识到分析问题的重要性,处理DP问题不应该是想出转移过程,应该是一步步分析出来的。这篇博客记录以后做题过程中我对DP分析方法的理解和总结
#one. 杨老师的照相排列 (第一篇废话较多)
DP问题
- 这道题目前我解释不出为什么要用DP做,但Count是DP一类题型
分析过程
- DP一般就是一个状态向另一个状态转移,在这个过程中维护Count。分析的突破口就是last,在本题中就是给一个学生安排好位置。
- 这个学生安排好了位置,整个局面与把这个学生拿走的这个局面就构成了两个状态。当然我们现在还不能确定这就是可以解题的状态。
- 所以下一步我们就要试着去能不能从两个状态中找到更改Count的转移过程。
- 我们发现这个学生拿走后与拿走前Count是不变的,也就是两个局面满足条件的合影位置方案数相等。(其实之后正确理解应该是,原局面的Count在仅拿走一个学生时不改变)。这时候不要觉得dp[i]=dp[i-1]
- 就像博弈论一样,我们要找出拿走一名学生前的局面下面所有的子局面,就是可以转移到原局面的所有局面。由于是只移动一个学生,那么这个学生最多可以来自5行,所以找到有5种子局面。
- 接下来看能不能写出转移方程,写不出来前面分析屁用没有。
- 5个子局面都有达到这个子局面的方法数,加上一个学生不会增加原来的方法数,但是都变成了我们正在分析的局面,所以若用 (Count())表示方法数,(F,S_{1},S_{2},S_{3},S_{4},S_{5}) 表示未拿走学生的局面和5种子局面,可得 (Count(F)=sum _{i=1} ^{i=5}Count(S_{i})).
- 到现在,状态转移方程方程写出来了,接下来就是如何写代码了,这部分与博客主要内容无关就不写了。还有这里所有的局面其实就是状态,只是感觉状态像一个“点”,用局面能更好体现本题状态特点。
- 最后总结一下过程:先用last划分了状态,然后分析所有子状态,写出转移方程。
以上是关于从集合的角度思考DP问题的主要内容,如果未能解决你的问题,请参考以下文章