난이도
골드 IV
풀이
import sys
input=sys.stdin.readline
N=int(input())
arr=list(map(int,input().split()))
dp1=[1]*len(arr)
dp2=[1]*len(arr)
sub_len=[0]*len(arr)
for i in range(N):
for j in range(i):
if arr[i]>arr[j]:
dp1[i] = max(dp1[i], dp1[j] + 1)
arr.reverse()
for i in range(N):
for j in range(i):
if arr[i]>arr[j]:
dp2[i] = max(dp2[i],dp2[j]+1)
dp2.reverse()
for i in range(len(arr)):
sub_len[i]=dp1[i]+dp2[i]
print(max(sub_len)-1)
링크
https://www.acmicpc.net/problem/11054
11054번: 가장 긴 바이토닉 부분 수열
첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
BOJ 18430번(무기 공학) (0) | 2023.03.28 |
---|---|
BOJ 16922번(로마 숫자 만들기) (0) | 2023.03.27 |
BOJ 1038번(감소하는 수) (0) | 2023.03.26 |
BOJ 9324번(진짜 메세지) (0) | 2023.03.24 |
BOJ 1260번 - DFS와 BFS (0) | 2023.03.22 |