백준
백준 14501 퇴사 (파이썬)
chldkato
2020. 4. 18. 00:41
https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
1. 상담에 걸리는 기간과 금액을 리스트 a에 저장한다
2. dfs 조합으로 상담할 날짜를 고른다
퇴사일에서 현재 날짜를 뺐을 때의 값이 상담 기간보다 크거나 같은 날짜만 선택해야한다
3. 상담 일정을 정했으면 모든 금액을 더한 후 ans에 최대값을 저장한다
import sys
input = sys.stdin.readline
def dfs(idx):
global ans
for i in range(idx, n):
if select[i]:
continue
if n - i >= a[i][0]:
select[i] = 1
dfs(i + a[i][0])
select[i] = 0
res = 0
for i in range(n):
if select[i]:
res += a[i][1]
ans = max(ans, res)
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
select = [0 for _ in range(n)]
ans = 0
dfs(0)
print(ans)