动态规划专题

动规:由小问题的解构造大问题


注:

关键在于小问题的划分

注意边界条件的划分!

根据递推公式,明确dp数组的构造顺序

一维dp:数组维度与输入维度相关

一般是划分为两个问题,枚举第一个问题k(k<=i/2),然后与第二个i-k进行组合

无条件组合,一般输入是一个整数n,枚举1:k(dp+dp),取最小值

22. 括号生成f(i)=连加f(j)*f(i-j-1)

96. 不同的二叉搜索树

664. 奇怪的打印机

471. 编码最短长度的字符串

小问题的解通过判断+计算获得,然后组合第二个问题(计算结果+dp)需要判断(1+小问题)

279. 完全平方数

368. 最大整除子集

813. 最大平均值和的分组

32. 最长有效括号

647. 回文子串

813. 最大平均值和的分组

递推公式对题目有很强依赖性的动规

10. 正则表达式匹配

01背包(dfs一般会超时)

416. 分割等和子集

dp实现细节

不需要排序,因为不会像dfs那样根据“前面的都没选而提前停止”

不必要记录每种硬币的数量,记录可以减少时间复杂度,但是代码会复杂。

只要比较dp[i-1][*]就ok了,不需要再往上查找,因为true会向下传

带限制的dp

787. K 站中转内最便宜的航班

事物操作性动规:用多个动规数组模拟不同操作

309. 最佳买卖股票时机含冷冻期

975. 奇偶跳

动规+dfs(记忆化dp:就是我理解的dp+dfs,用于计算顺序不好找的时候)

1048. 最长字符串链

1340. 跳跃游戏 V

128. 最长连续序列

状态压缩dp 

https://zhuanlan.zhihu.com/p/340063230j

状态不好表示/比较,利用位数特点等,将其转换为基础类型(如(i,j)表示为i*000+j),再进行求解。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容