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

 

 

posted @ 2017-11-16 15:47  Superwalker  阅读(140)  评论(0编辑  收藏  举报