''' 解题思路: 动态规划,最长上升子序列 dp[i]定义:在位置i处结束的,最长上升子序列长度 更新公式:当L[i]>L[j]时,p[i]= max(dp[j]+1, dp[i]),j为i之前所有的位置 边界条件:dp[i] = 1 ''' while 1: try: pass n = int(input()) L = list(map(int,input().strip().split())) #print('n=',n) #print('L=',L) #------------------------------ # dp[i],0<=i<=n-1,以i为终点上升子序列的最大长度 dp = [1]*n maxLen = 0 for i in range(1,n): # 第i个桩高度L[i] for j in range(0,i): # 第0~i-1个桩调度L[0]~L[i-1] if L[i]>L[j]: # 如果存在L[i]>L[j]则maxLen[i]需更新 dp[i]= max(dp[j]+1, dp[i]) # 在0<=j<=i-1中,保留更大的更新 if dp[i]>maxLen: maxLen = dp[i] # 最大的更新对maxLen[i]赋值 print(maxLen) # 对所有maxLen[i]取最大 except: break