N = int(input())
A = list(map(int, input().split()))
# DP 배열 초기화
dp = [1] * N # 각 위치에서의 최대 증가 부분 수열 길이
# LIS 계산
for i in range(N):
for j in range(i):
if A[i] > A[j]:
dp[i] = max(dp[i], dp[j] + 1)
# 가장 긴 증가하는 부분 수열의 길이 출력
print(max(dp))
가장 긴 증가하는 부분 수열 (Longest Increasing Subsequence, LIS) 문제는 주어진 수열에서 특정 숫자들을 순서대로 선택했을 때, 이들이 증가하는 순서를 유지하면서 구성되는 가장 긴 부분의 부분 수열을 찾는 문제이다. 부분 수열은 주어진 수열의 원소들 중 일부를 순서대로 선택하여 구성되며, 선택된 원소들 사이에 다른 원소들이 있을 수 있다.
입력 : 수열의 크기 N 과 수열 A 를 입력 받는다.
DP 배열 초기화 : 길이 N 의 배열 dp 를 생성하고 모든 값을 1로 초기화한다. dp[i] 가 의미하는 것은 위치 i 에서 끝나는 가장 긴 증가하는 부분 수열의 길이를 나타낸다.
LIS 계산하기