题目
这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。
给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。
测试样例:
[1,4,2,5,3],5
返回:3
思路
dp[i]=max{dp[j]+1},j=1,2,3...i
代码
class LongestIncreasingSubsequence:
def getLIS(self, A, n):
# write code here
dp = [1 for _ in range(n)]
for i in range(n):
for j in range(i):
if A[i] > A[j] and (dp[j] + 1) > dp[i]:
dp[i] = dp[j] + 1
return max(dp)