题目
BM71 最长上升子序列(一)
分析
dp[i] 考虑到下标i,其组成的最长上升子序列长度
可以用动态规划的原因: 到i的结果可以由到j (j<i) 的结果推出,只需要判断下标j对应的数字是否比下标i 对应的字母小即可
注意:要特判数组为空的情况
状态转移:dp[i] = max(dp[j] + 1,dp[i])
代码
class Solution:def LIS(self , arr: List[int]) -> int:# write code heren = len(arr)# 特判数组为空的情况 0<=nif n == 0:return 0# dp[i] 考虑到下表为i的数组,其最长上升子序列长度,初始化为1,至少有一个字母dp = [1 for i in range(n)]# 考虑到下标为ifor i in range(n):# 考虑i前面的升序元素for j in range(i):if arr[j]<arr[i]:dp[i] = max(dp[j] + 1,dp[i])return max(dp)