문제
풀이.
저번에 포스트 했던 LIS를 구하는 알고리즘을 응용한 문제이다.
앞에서 부터 구한 LIS와 뒤에서 부터 구한 LIS를 더해서 최댓값을 출력하면 된다.
단 두개를 더하고 숫자 하나는 겹치기 때문에 -1을 해줘야한다.
소스코드.
import sys
A = int(sys.stdin.readline())
seq = list(map(int, sys.stdin.readline().split()))
dp1 = [0] * A
dp2 = [0] * A
result = [0] * A
for i in range(A):
for j in range(i):
if seq[i] > seq[j] and dp1[i] < dp1[j]:
dp1[i] = dp1[j]
dp1[i] += 1
result[i] += dp1[i]
for i in range(A-1, -1, -1):
for j in range(A-1, i, -1):
if seq[i] > seq[j] and dp2[i] < dp2[j]:
dp2[i] = dp2[j]
dp2[i] += 1
result[i] += dp2[i]
print(max(result) - 1)
'프로그래밍 > 백준' 카테고리의 다른 글
백준 1912 연속합 - 파이썬 (0) | 2021.07.20 |
---|---|
백준 2565 전깃줄 - 파이썬 (0) | 2021.07.19 |
백준 11053 - 가장 긴 증가하는 부분 수열 (0) | 2021.07.14 |
백준 2156 포도주 시식 - 파이썬 (0) | 2021.07.14 |
백준 11444 피보나치 수 6 - 파이썬 (0) | 2021.07.14 |