Algorithm/Problems

99클럽 코테 스터디 28일차 TIL + DP

공부좀하시졍 2024. 11. 25. 00:06

https://www.acmicpc.net/problem/11055

import sys
input = sys.stdin.readline

n = int(input())
A = list(map(int, input().split()))

dp = [0] * n
dp[0] = A[0]

for i in range(n):
    for j in range(i):
        if A[i] > A[j]:
            dp[i] = max(dp[i], dp[j]+A[i])
        else:
            dp[i] = max(dp[i], A[i])

print(max(dp))
  • dp리스트를 0으로 초기화 한 후 dp[0]값은 이전 값과 비교할 것이 없기 때문에 A[0]으로 초기화 해준다.
  • 자신 앞까지의 값을 비교하며 이전까지의 증가하는 값의 합과 자기자신의 값(dp[j]+A[i])과 dp[i]중 큰 값으로 초기화한다.
  • 자신보다 큰 값을 만나면 A[i]과 dp[i] 중 큰 값으로 초기화 해주어야 하는데 증가하는 부분 수열이 없는 경우 자기자신의 값으로 초기화 해 뒤에 나올 값들에 대비해야한다.