一 接龙型动态规划
题目一般是告诉你一个接龙规则,让你找最长的“龙”。
解题要点有两个:
(1)要把「接龙规则」提炼并表示出来
(2)需要用“倒推法”(通常是写一个getPath()函数),获取最长‘龙’的具体方案。这就往往需要一个与dp[i]唯独相同的数组prev[i]记录,是那个前继状态给到了当前i这个最佳方案。
代表题目:
- Leetcode#300. Longest Increasing Subsequence
- Lintcode#398. Longest Continuous Increasing Subsequence II
- Leetcode#368. Largest Divisible Subset
1. Leetcode#300. Longest Increasing Subsequence
- 题目:输入一个int[],找出从左到右的连续上升的子序列
- 接龙规则:从左到右挑选数,数要一个比一个大
- 状态表示:dp[i] 表示以第i个数结尾的Incresing subsequence最长是多长 --> return max(dp[0,...n-1])
- 转移方程:dp[i] = max(dp[j] + 1),其中j < i, 且nums[j] < nums[i] <