알고리즘/백준
[백준] 14501. 퇴사 /Python
빙빙
2021. 5. 2. 08:56
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를 호출 시켜서 재귀를 돌게 한다.