[알고리즘/백준] 11054: 가장 긴 바이토닉 부분 수열(python)
max를 이용해서 풀면 답 안나온다.
맨 앞에서 LIS를 적용 시키고, 뒤집어서 적용 시켜준다.
그리고 두개를 합쳐주면 되는데... 뒤집어서 계산 했던거는 인덱스가 반대로 들어간다. 따라서 다시 뒤집어서 더해주면 된다.
N = int(input())
a = list(map(int, input().split()))
b = a[::-1]
dp = [1] * (N)
dp2 = [1] * (N)
for i in range(N):
for j in range(i):
if a[i] > a[j]:
dp[i] = max(dp[i], dp[j] + 1)
if b[i] > b[j]:
dp2[i] = max(dp2[i], dp2[j] + 1)
print(max([i+j for i, j in zip(dp, dp2[::-1])]) - 1)
Author And Source
이 문제에 관하여([알고리즘/백준] 11054: 가장 긴 바이토닉 부분 수열(python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@y7y1h13/알고리즘백준-11054-가장-긴-바이토닉-부분-수열python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)