본문 바로가기
Problem Solving/Dynamic Programming

[다이나믹 프로그래밍] 백준 11054번: 가장 긴 바이토닉 부분 수열 / 골드 3

by ggyongi 2021. 12. 3.
반응형

https://www.acmicpc.net/problem/11054

 

11054번: 가장 긴 바이토닉 부분 수열

첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)

www.acmicpc.net

well-known problem인 LIS를 조금 응용하면 풀 수 있는 문제!

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

dp_asc = [0 for _ in range(n)]
dp_desc = [0 for _ in range(n)]

for i in range(n):
    max_val = 0
    for j in range(i):
        if nums[j] < nums[i]:
            max_val = max(max_val, dp_asc[j])

    dp_asc[i] = max_val+1


nums.reverse()

for i in range(n):
    max_val = 0
    for j in range(i):
        if nums[j] < nums[i]:
            max_val = max(max_val, dp_desc[j])

    dp_desc[i] = max_val+1

answer = -1
for i in range(n):
    answer = max(answer, dp_asc[i] + dp_desc[n-1-i])
print(answer-1)
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글