#通过动态规划方式解决 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数组里记录的某位置最大值