실버2 : 동적계획법 문제이다.

풀이

유명한 문제지요?

Code

# dp[n] = n까지의 원소를 포함했을 때, 가장 긴 증가하는 부분 수열의 길이
# dp[n] = dp[1~n-1] + 1 (만약 가능할 경우)
 
import sys
 
input = sys.stdin.readline
 
n = int(input())
a = [0] + list(map(int, input().split()))
dp = [1 for _ in range(n + 1)]
 
for i in range(2, n + 1):
    for j in range(1, i):
        if a[i] > a[j]:
            dp[i] = max(dp[i], dp[j] + 1)
 
print(max(dp))
 

Reference