import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int,input().split()))
dp = [1]*N
for i in range(N):
m = A[i]
for k in range(i):
if m > A[k]:
dp[i] = max(dp[i], dp[k]+1)
print(max(dp))
dp[i] : 인덱스 0부터 i까지 가장 긴 배열 길이
0부터 i-1까지 수 중에서, i번째 수보다 작은 수가 있으면 해당 배열 뒤에 i번째 수를 추가한다는 느낌(이 때 배열의 크기는 dp[k]+1)으로 dp[i] = max(dp[i], dp[k]+1)을 통해 dp[i]의 최댓값을 for k in range(i)동안 계속해서 업데이트해준다.
나와 같은 실수로 틀리는 사람을 위해 다음 예시를 첨부한다.
예시를 보면 이해할 수 있을 것이다.
100 1 2 101 3 4 5
내 처음 코드로 하면 100보다 큰 숫자가 101만 존재하므로 출력값이 2이다.
하지만 정답은 [1,2,3,4,5] 수열로 5가 나와야 한다.