티스토리 뷰

import sys
sys.stdin = open("input.txt")

def DFS(day,pay):
    global res
    if day == N: #일 수가 N보다 커지면
        if res < pay: #원래있는 페이의 합 보다 크면 갱신
            res = pay
        return
    elif day > N:
        return

    DFS(day+1,pay) #선택 안하는 경우
    if day + L[day][0] <= N: #선택 하는 경우
        DFS(day+L[day][0],pay+L[day][1])


N = int(input()) # N+1되는 날에 퇴사함
# T = []
# P = []
L =[]
for i in range(N):
    t, p = map(int, input().split())
    # T.append(t)
    # P.append(p)
    L.append([t,p])
res = 0
DFS(0,0)
print(res)

일단 DFS로 풀었다.

그래서 선택하는 경우, 안하는 경우로 나눴고

먼저 선택 안 하는 경우로 DFS함수를 호출을 한다.

한편,

day가 N과 같을 때 그 pay의 값을 res에 넣어주어 리턴 시킨다.

day > N일 때는 범위를 넘어가므로 그냥 리턴 시킨다.

이제 선택 하는 경우를 보자.

day+걸리는 기간 <= N이면 DFS를 호출 시켜서 재귀를 돌게 한다.

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 7785. 회사에 있는 사람 /Python  (0) 2021.05.05
[백준] 1026.보물 /Python  (0) 2021.05.02
[백준] 2644 .촌수계산  (0) 2021.04.29
[백준] 6064 . 카잉 달력  (0) 2021.04.24
[백준] 1946. 신입사원  (0) 2021.04.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함