MapleStory Finger Point

[BOJ] #11053 - 가장 긴 증가하는 부분 수열

2021. 6. 22. 18:14Problem Solving/Online Judge

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

 

 

** 문제 유형

  • 동적 프로그래밍, LIS

 

** 풀이

  1. 가장 긴 증가하는 부분 수열(LIS) 문제는 전형적인 동적 프로그래밍 문제
  2. 수열의 크기가 N일 때, 기본적인 동적 프로그래밍 알고리즘으로 O(N^2)에 해결 가능
  3. D[i] = array[i]를 마지막 원소로 가지는 부분 수열의 최대 길이
  4. N = 6일 때,

 

n = int(input())
array = list(map(int, input().split()))

dp = [1] * n

for i in range(1, n):
    for j in range(0, i):
        if array[j] < array[i]:
            dp[i] = max(dp[i], dp[j] + 1)

print(max(dp))

 

 

 

'Problem Solving > Online Judge' 카테고리의 다른 글

[BOJ] #1439 - 뒤집기  (0) 2021.06.25
[BOJ] #5585 - 거스름돈  (0) 2021.06.25
[BOJ] #12865 - 평범한 배낭  (0) 2021.06.22
[BOJ] #1904 - 01타일  (0) 2021.06.22
[BOJ] #1325 - 효율적인 해킹  (0) 2021.06.22