• dp记录。


    0.dp

    dp的本质上是在一个有向无环图上做拓扑,当前状态不会受后续结果的影响,因此设计状态是这很重要的一点

     考虑转移方程 ,可以从当前这个点,可以从哪些点走过来,或者说当前这个点可以走到哪些点。

    设计到一段数字中选取不回头的多少个 

    1.线性d

    一维状态   枚举以什么结尾,最后一个数字是什么等等 

    二维可以枚举其他需要的性质

    利用 i % 2 和 i - 1 % 2  实现滚动数组,可以不需要设置外置的数组

    同时写答案的时候也得 n % 2

    如果观察到字母比较有限,可以考虑从字母  26  

    设计到一段数字中选取不回头或者删除多少个 , 设方程的时候还可以维护选取了j个 

    2.背包dp

    背包有几个状态就考虑开几维数组

    背包中求方案数,和价值有细微的区别,求价值是求最大值,而方案数是求总和,因此,方案数的转移只需要将所有前置的情况加在一起就行了

    背包问题用来解决求子集问题 如  1  2  4  7

    求可以达到的价值和

    3.树形dp

    设计对树形dp递归的临近状态,如果以图的方式存储那就按拓扑序进行

    如果是left right 访问二叉树,当left == right  访问到了叶节点

     4.状压dp

    状压dp有俩种,一种是带有显明的“层数”转移,俩种状态之间存在唯一的转移情况,往往是线性的状压dp,另一种是是类似枚举状态,通过各种的预处理,实现目前状态的最优解。

     图上状压是真的挺难的题 , 通过枚举图上一些特殊点,来实现转移 ,有种bfs的思想在里面,只不过队列中的元素变成了状态

    5.期望dp

     期望dp 其实更像是一些数学问题,首先得知道一个 E(ax + by) =  a*E(x) + b * E(y)

    左边是转移目表,右边是已知状态

    期望dp要从已知的状态 向未知的状态转移,讲起来好像有点抽象

    举个例子,求从起点到终点的期望,但你初始知道的是终点到终点的期望为0,所以你应该从终点开始反向转移,

    做了很多题,发现到头了还是数学思维比较重要

    6.数位dp

    数位dp  其实很想是一个数位上的记忆化搜索,对于这些题,其实都有一定的套路

    如果是多次数位dp,你可以观察哪些量需要重置 , limit  这个限制多半是要重置的,但lead0等等性质其实都不需要重置,因为他填的是数位,并非具体的数字

     不同的数的dp状态其实只有那个limit不同,把limit放在状态外  就能实现一次memset

    或者说,设计状态的时候没有limit这以为

  • 相关阅读:
    mybatis02(动态sql及分页)
    C++ 小游戏 视频及资料集(四)
    VBA之正则表达式(36)-- 提取年份范围
    软件性能瓶颈问题之数据库性能问题定位
    [mysql] 深入分析MySQL版本控制MVCC规则--实测 (mysql 8.0 innodb引擎)
    opencv 没办法控制焦距怎么办?来试一下 pyuvc 吧
    springboot+vue基于j2ee企业人力资源管理系统设计与实现(论文+项目源码)
    node.js的认识与了解2
    云里黑白第二十回——本游戏需要Windows10 1909版(组件) 18363或更新版本系统
    Redis数据持久化(持久化过程中写操作如何处理)
  • 原文地址:https://blog.csdn.net/m0_75125820/article/details/131302241