经典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])

 

要么优秀要么生锈
原文地址:https://www.cnblogs.com/Superwalker/p/7844699.html