浅谈动态规划
最近连续好几天都在复习动态规划,也算有点心得体会,再次略记一下
-
动态规划的思路来源
动态规划是近几年的常考题目,所以如果想要学好动规,就必须要活学活用。
做出动态规划一般分为以下几个步骤:
-
定状态:
状态是一个动规题的灵魂,状态的定义一般有一些常用方式,比如说:当前元素是否被用过?(可以用0/1来表示用过或没用过),最重要的是,要求什么什么就设什么,其他影响它的因素全都放到状态的其他维里。
-
初始化:
动规的初始化很简单,其实就有下面几种常见方式:
(1) 求最大值,则初始化成负无穷(最小值反之)
(2) 不合法的状态初始化成正无穷(有时是负无穷,还有时候是0) -
定转移:
有了状态,转移方程也就好写了,一般就要考虑,当前状态是被那个状态转移来的?当前状态可以转移到那些状态?从而进行转移
-
动态规划的分类
动态规划分类很多,一般来说,常用的有以下几种:
- 线性动规(题型灵活,极为常见)
- 树形动规(偏难,较为灵活,可以与背包,记搜等结合)
- 区间DP (题目难度不大,不是非常灵活)
- 状态压缩DP (数据很小,扩展性不高,极难理解)
-
动态规划的写法
对于我个人而言(然鹅我也很蒟蒻),一般是先定一个极为复杂的状态(有时可以达到8维),然后写一遍转移方程,最后进行优化(降维等)
-
个人对DP的看法
俗话说的好:
OI毒瘤千千万,DP树剖各一半
(动态规划确实比树剖难得多)我只有一句话了,DP真是太毒瘤了!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示