#通过动态规划方式解决
n=int(input())
num=list(map(int,input().split()))
dp=[1]*n #根据数组长度创建[1,1,1,1,...]的dp数组,它代表每个位置上有的最长子序列长度,它本身就是一个子序列,故而初始化为1
for i in range(n): #遍历数组
for j in range(i):
if num[i]>num[j]: #分别比较当前数和这个数之前的数大小,如果大于就在之前的那个数位置dp数组的基础上加一并更新当前位置dp数组小大
dp[i]=max(dp[i],dp[j]+1) #因为我们只记录最大的,所以留下原位置和以前位置比较后的最大值来更新dp数组
print(max(dp)) #最后返回dp数组里记录的某位置最大值

京公网安备 11010502036488号