For Programmer

백준 11055번 파이썬 문제풀이(가장큰 증가 부분 수열) - DP(탑다운) 본문

코팅테스트/백준 문제 모음

백준 11055번 파이썬 문제풀이(가장큰 증가 부분 수열) - DP(탑다운)

유지광이 2022. 4. 11. 00:16
728x90


현재 고른 위치와 전에 고른 위치를 dp에 저장해서 다음번에 도착시 해당 dp에 저장된 값을 리턴하도록 코드를 구현했다.

 

import sys

sys.setrecursionlimit(10000)
N = int(input())
arr = list(map(int, input().split())) + [0]

dp = [[-1] * (N + 1) for _ in range(N + 1)]


def recur(cur, pre):
    if cur >= N:
        return 0

    if dp[cur][pre] != -1:
        return dp[cur][pre]

    if arr[cur] > arr[pre]:
        dp[cur][pre] = max(recur(cur + 1, cur) + arr[cur], recur(cur + 1, pre))
    else:
        dp[cur][pre] = recur(cur + 1, pre)

    return dp[cur][pre]


print(recur(0, -1))
728x90
Comments