经典dp问题
最大子序列和
分析
dp[i]:表示以i结尾的最大子序列和,每个位置i的决策:独自成段还是和上一段一起。dp[i] = max ( dp[i-1] + a[i],a[i] ),最终答案为dp[1~n]中最大的
时间复杂度O(n)
最长上升子序列
分析
dp[i]:以i结尾的最长上升子序列,每个位置i的决策:如果a[i] > a[j] (1<=j<i) dp[j]+1 即可
时间复杂度O(n^2)
优化
二分+技巧
时间复杂度O(nlogn)
最长公共子序列
分析
dp[i][j]:一个字符串带位置i, 一个到位置j的最长公共子序列,转移:如果 a[i] = a[j] 则 dp[i][j] = dp[i-1][j-1] + 1,
反之dp[i][j] = max(dp[i-1][j],dp[i][j-1])
要么优秀要么生锈