LIS 시리즈 문제중 하나이다. 역순으로도 구해서 각 지점 카운트합이 가장 높아지는 부분이 꺽이는 부분.
N = int(input())
A = [0] + list(map(int, input().split()))
LDS = [1]*(N+1)
LIS = [1]*(N+1)
Bi = []
# 바이토닉 수열의 핵심은 앞에서 LIS하고 역순 LIS dp를 각각 만들어
# 두 dp 인자의 합 = 올라갔다 내려오는 cnt를 만드는 것.
# 싸피 CT문제 예제로 나오는 문제라 아이디어는 매우 쉬웠다.
for i in range(1,N+1):
for j in range(1,i):
if A[i]>A[j] and LIS[i]<=LIS[j]:
LIS[i] = LIS[j] + 1
if A[-i]>A[-j] and LDS[-i]<=LDS[-j]:
LDS[-i] = LDS[-j] + 1
for i in range(1,N+1):
Bi.append(LIS[i]+LDS[i]-1)
print(max(Bi))
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 2633 음악프로그램 (1) | 2021.07.25 |
---|---|
[백준][Python] 2458 키순서 (0) | 2021.07.24 |
[백준][Python] 11048 이동하기 (0) | 2021.07.24 |
[백준][Python] 14912 숫자빈도수 (0) | 2021.07.24 |
[백준][Python] 19598 최소 회의실 개수 (0) | 2021.07.24 |