本文整理于【拉勾*力扣】课程笔记,侵删~
1、动态规划定义
2、例题:最长上升子序列的长度
题目:
解法:
1、暴力搜索:
2、动态规划:
这个状态转移方程的含义是:以nums[n-1]结尾的最长子序列长度,等于以nums中0到n-2任意一个数字结尾的最长子序列长度+1
代码:
递归写法
递归写法时间复杂度分析:
递归+记忆化:直接递归会有大量重复计算,时间复杂度太高,可以对已经计算过的进行记忆化。
记忆化 时间复杂度分析:
递归需要不停的堆栈操作,实际工作中不推荐使用
非递归写法:
非递归写法时间复杂度分析:
3、动态规划之线性规划
4、例题:打家劫舍
题目:
思想:
给定一个数组,不能选择相邻的数,求如何才能使得总数最大:f(n) = max{f(n-2)+n, f(n-1)}
代码:
5、例题:不同路径
题目:
解法:
暴力搜索和动态规划:
6、动态规划之区间规划
7、例题:最长回文子序列
题目:
代码:
思想:考虑长度为1-n的子序列是否为回文序列
8、约束规划问题
np问题