practivceAlgorithm/백준
[백준][Python] 11054 가장 긴 바이토닉 부분수열.
findTheValue
2021. 7. 24. 12:52
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))