10.28 - 九章高级算法班题目大总结(5,6课)

课程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也可以用二分法,不过我已经看不下去了,休息一下

    原文作者:健时总向乱中忙
    原文地址: https://www.jianshu.com/p/5e12e68c5952
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞