从集合的角度思考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划分了状态,然后分析所有子状态,写出转移方程。

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

时间: 2024-11-07 16:33:50

从集合的角度思考DP问题的相关文章

LoadRunner几个重要的概念:事务、集合点、思考时间

在LoadRunner的脚步编写中,有三个重要的概念:事务.集合点.思考时间 事务: 事务又称为Transaction,在LoadRunner中的定义如下:An end-to-end(browser-to-browser)  measurement of one or more user actions within action  file.中文理解如下:事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义

Spark源码的角度思考Scala中的模式匹配

学习了从Spark源码的角度思考Scala中的模式匹配,如case class应用,伴生对象中用apply,所以没有new class,直接进行模式匹配,例子如下 Case class RegisterWorker( Id: string, Host: string, Port: int, Cores:int, Memory:int, webUiPort:int, publicAddress:string, Extend DeployMessage{ Utils.checkHost(host,”

培训感悟---站在客户的角度思考

"好"并不一定就能够解决问题,适合我们的才是最为重要的               ---题记 最近一直在思考,自己是否要准备一个为期5天的大数据的课程.从自己知道的几个部分全面去讲解大数据的产生,发展,落地及与我们的关系.比较担心的是自己没有做过相关的项目,这样只讲原理是否会有更大的效果. 为什么会产生以上的想法,是因为后来发现,当我们站在客户的角度来思考问题的时候,才能更加深入的感受到客户对技术更迭的期待以及变革自身营利模式的迫切. 从当初的滴滴打车与快滴打车的竞争中,我们就能够看

从IT的角度思考BIM(二):模式与框架

我们满怀着美好期许,鼓起勇气敲响了 BIM 世界的大门.忽然人群中有人高呼:BIM 已死,大家都散了吧! 这时人群开始骚动起来.“我早就说这玩意是忽悠人的吧,你们不信还偏要来”,“我花了好多钱准备这次探索,这都死了,咋办?导游在哪呢,我要投诉!”有些人原路折返,有些人捶胸顿足,有些人呆若木鸡. 门慢慢地开了,人群又开始骚动起来…… 本文将继续从 IT 的角度来思考 BIM,希望能给大家带来一些启发. 模式与框架 软件设计中的“模式”源自建筑师克利斯托弗·亚历山大(Christopher Alex

从 IT 的角度思考 BIM(一):面向对象

还记得那个笑话吗:要把大象放进冰箱,总共分几步?这不仅仅是一个笑话,还是一个值得我们好好分析的笑话. 如果要放进冰箱的是一个苹果,那么也就不可笑了,但换成大象,就引起了我们的兴趣和注意,为什么? 我们现在对 BIM 已不再陌生,但如果跳出建筑的视角来思考 BIM,我们是否会有全新的认识呢? 本文将从 IT 的角度来思考 BIM,希望能给大家带来一些启发. 面向对象与面向过程 当我们把一个苹果放进冰箱时,我们其实并不太关注它(或者试试把苹果手机放进冰箱!),我们关注的是放进冰箱这个事儿.不,事实上

元素与集合的问题思考

今天同事遇到一个元素和集合的问题,引发了我的思考.情景如下 一个元素和集合,如果元素在集合内,则移除该集合内的这个元素,否则添加该元素进入这个集合. 他给出代码如下: <?php $value=5; $list=array(1,2,3,4,5,6,7,8,9,10); if(empty($list) || !in_array($value,$list) ) { $list[] = $value; }else { foreach($list as $k => $v) { if($v == $va

从数据库、页面加载速度角度思考 id设计 sku asin

w 超值套装 [小米红米4A][超值套装]小米 红米 4A 全网通 2GB内存 16GB ROM 香槟金色 移动联通电信4G手机 双卡双待[行情 报价 价格 评测]-京东  https://item.jd.com/4891234.html#crumb-wrap [小米红米4A][超值套装]小米 红米 4A 全网通 2GB内存 16GB ROM 玫瑰金色 移动联通电信4G手机 双卡双待[行情 报价 价格 评测]-京东  https://item.jd.com/4096723.html#crumb-

第74讲:从Spark源码的角度思考Scala中的模式匹配

今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,........){}这里为模式匹配,而我们的模式匹配类RegisterWorker之前就已定义好,如下图: 我们可以看到,我们的模式匹配类是已经定义好的,当我们的master接收到worker发来的消息时,进行模式匹配: . 这里还有一个知识点,我们可以发现,当我们进行模式匹配时,我们并没有使用new方法

[51Nod 1301] 集合异或和 (dp)

传送门 Solution 一道比较好的dp题 想了半天组合数QAQ 首先要知道的是 A<B一定是B有一位是1且A的这位是0且前面都相等 那么肯定是要枚举这一位在哪里然后求出方案数 方案数考虑类似背包的方法分三种情况转移具体见代码 Code #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #defi