课程5: dp问题1,滚动数组优化,博弈类,记忆化搜索
Longest Increasing Continuous Subsequence:左边找一下,右边找一下
Maximum Subarray:好像用不到动态规划
Maximal Square:square利用边的性质来做递推
Longest Palindromic Substring:好像直接扩张就可以了,也用不上动态规划
Coins in a Line II:博弈类问题,直接只考虑一个人的就好
Coins in a Line:和上面那题一样
House Robber:简单的dp
Maximum Product Subarray:简单的dp
Longest Increasing Subsequence:LIS,经典的dp
Longest Increasing Continuous Subsequence II:滑雪道问题,状态为以某个点为终点的最长递减路径,用记忆化搜索来做
Maximal Square II:和1很相似
课程6: dp问题2,区间dp,背包问题,双串比较
Scramble String: 算是记忆化搜索类吧
Longest Common Subsequence:简单的二重匹配
Edit Distance:同样简单的二重匹配
终点复习背包问题1,2,3,4,5,6
Distinct Subsequences:挺直观的双链匹配
Interleaving String:也算是挺简单的一道
Minimum Adjustment Cost: D[i][v]: 把index = i的值修改为v,所需要的最小花费,也就是i-1个值调整到j,然后把i位调整到k时候的最小花费
Burst Balloons:区间dp,和下面那题是一样的,都先找到分割点,然后用记忆化搜索来做
Stone Game :区间dp,找到分割点,也就是当合并ij的时候,以k为断点,也就是合并ik,合并k+1~j然后再把这两个合并起来,有些记忆化搜索的意思
Maximal Square II:和maximal square 很类似只是判定条件变了一点点
Post Office Problem:dp[i][l]=dp[j][l-1] + dis[j+1][i] (l-1<=j<i)。其中dp[i][l]表示在前i个村庄中建l个post的最短距离,j为分隔点,可以将问题转化为在前j个村庄建l-1个post的最短距离+在第j+1到第i个村庄建1个post的最短距离。其中有个性质,如元素是单调排列的,则在中间位置到各个元素的距离和最小。
k sum: 用三维动态规划。ksum[i][j][l]表示前j个元素里面取l个元素之和为i。
初始化:ksum[0][j][0] =1(j:0~n),即前j个元素里面取0个元素使其和为0的方法只有1种,那就是什么都不取 ksum[i][j][l]=ksum[i][j-1][l]+ksum[i-A[i-1]][j-1][l-1]
Best Time to Buy and Sell Stock IV:dp[i][j] 对前j个元素进行最多i次transactions获取的最大值
K Edit Distance: 实在是太麻烦了,还有那题等Google面试完再看吧,真是太复杂了
copy books II: 可以用dp也可以用二分法,不过我已经看不下去了,休息一下