各种动态规划经典模型

1.LIS
方法1. \(n^2\) 动态规划
方法2. 对上面的动态规划优化后,发现决策是可以简单化的,就是一些决策可以直接舍弃掉,对应到搜索就是剪枝,用二分查找搞到\(n^log(n)\).

2.LCS
方法1.时间空间均为\(n^2\)的动态规划。记\(f(i,j)\)为匹配到A的i和B的j.
上面可以压缩一维空间。

3.LCIS 最长公共上升子系列。
方法一,套用LCS模型,得到\(n^3\)算法。
优化上面,降到n^2

4.二叉树的直径
首先找重复子问题,发现二叉树的最长链要么过节点,要么在子树里面,而子树的是这个的子问题。
考虑动态规划,
\(d(i)\) 为以i为根的子树的最长链,那么,要么是左面到叶节点的最远距离加上右边到叶节点的最远距离,要么答案在i的子树里面。所以一遍dfs即可完成计算
最长链
同时还有一个算法,第一次dfs找到以1为根的最远叶子,然后以叶子为根再找一遍。
配合动态规划可以在\(O(n)\) 中找出所有点的最长链。

posted @ 2017-07-02 22:48  rsqppp  阅读(248)  评论(0)    收藏  举报