码迷,mamicode.com
首页 > 其他好文 > 详细

从集合的角度思考DP问题

时间:2020-02-09 22:17:54      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:题型   下一步   博弈论   记录   方法   步骤   code   sum   class   

从集合的角度思考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问题

标签:题型   下一步   博弈论   记录   方法   步骤   code   sum   class   

原文地址:https://www.cnblogs.com/A-sc/p/12288954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!