Algorithm(BOJ, Python)/Dynamic Programing
[백준_17216] 가장 큰 감소하는 부분수열 python
kurooru
2022. 7. 23. 14:09
이런 류의 문제에 이젠 익숙해진 기분이다.
마찬가지로 n의 범위가 1000이하이니
n^2까지의 시간복잡도는 인정해준다.
# n 입력
n = int(input())
# a 입력
a = list(map(int, input().split()))
# dp 설계
dp = [
0 for _ in range(n)
]
# dp 초기설정
dp[0] = a[0]
# dp 채워넣기
for i in range(1, n):
# 최댓값 설정
M = 0
# 이전까지 돌면서
for j in range(i):
# 감소하는 수열 중 dp값이 가장 큰 것을 찾아
if a[j] > a[i] and dp[j] > M:
# 최댓값 갱신
M = dp[j]
# dp 넣어주기
dp[i] = M + a[i]
# 출력
print(max(dp))