문제 설명
•
크기가 인 수열에 대해 가장 긴 바이토닉 부분 수열의 길이를 구하는 문제
예제 입력/출력
•
입력1
10
1 5 2 1 4 3 4 5 2 1
Plain Text
복사
•
출력1
7
Plain Text
복사
제약 조건
•
•
문제 풀이
풀이1 브루트 포스 -
풀이2 그리디
풀이3 DP -
풀이 코드
•
Bottom-Up 방식의 구현
# input
N = int(input())
arr = [0] + list(map(int, input().split()))
# solve
dp1 = [0] * (N + 1)
dp2 = [0] * (N + 1)
dp1[1] = dp2[N] = 1
# dp1
for n in range(2, N + 1):
dp1[n] = 1
for i in range(1, n): # dp1[n] 갱신
if arr[n] > arr[i]:
dp1[n] = max(dp1[n], dp1[i] + 1)
# dp2
for n in range(N - 1, 0, -1):
dp2[n] = 1
for i in range(N, n, -1): # dp2[n] 갱신
if arr[n] > arr[i]:
dp2[n] = max(dp2[n], dp2[i] + 1)
ans = 0
for n in range(1, N + 1):
ans = max(ans, dp1[n] + dp2[n] - 1)
print(ans)
Python
복사
Top-Down 방식의 구현