#典型的最长递增子序列问题 #动态规划五部曲-确定dp含义、写出递推公式、初始化、遍历、打印debug #a[i]表示输入的数,dp[i]表示以a[i]为终点的最长步数 #a[j]遍历a[0]-a[i-1],如果a[j]<a[i],则dp[i]就应该等于当前的dp[i]和dp[j]+1里面的最大值,即dp[i]=max(dp[i],dp[j]+1) #初始化这里有一点坑,要注意,应该赋值为全1,因为每一个数字最少都有一步 n=int(input()) dp=[1 for i in range(n)] a=[int(i) for i in input().split()] for i in range(len(a)): for j in range(i): if a[j]<a[i]: dp[i]=max(dp[j]+1,dp[i]) print(max(dp))