For Programmer
백준 12865번 파이썬 문제풀이(평범한 배낭) - DP(탑다운) 본문
728x90
이런 문제는 그냥 탑다운으로 풀어버리는 습관을 가져버렸다. C++이면 무조건 통과인데 N이 조금더 커지면 파이썬은 재귀제한을 풀어도 재귀 스택 용량 초과로 불가능하다... 하지만 이러한 재귀 식을 한번 이해해버리면 아주 풀기가 쉽기 때문에 탑다운 방식을 애용하자. (평균적인 재귀와는 달리 끝까지 재귀를 타고 들어가서 한개씩 쌓아서 나오는 구조이다.)
def dfs(depth, weight):
global ans
if weight > K:
return -100000000
if depth == N:
return 0
if dp[depth][weight] != -1:
return dp[depth][weight]
dp[depth][weight] = max(dfs(depth + 1, weight + bag[depth][0]) + bag[depth][1], dfs(depth + 1, weight))
return dp[depth][weight]
N, K = map(int, input().split())
bag = [tuple(map(int, input().split())) for _ in range(N)]
dp = [[-1] * (K + 1) for _ in range(N + 1)]
ans = 0
print(dfs(0, 0))
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 20951번 파이썬 문제풀이(유아와 곰두리차) - DP(탑다운) (0) | 2022.04.10 |
---|---|
백준 1149번 파이썬 문제풀이(RGB거리) - DP(탑다운) (0) | 2022.04.07 |
백준 11053번 파이썬 문제풀이(가장 긴 증가하는 부분 수열) - DP(탑다운) (0) | 2022.04.06 |
백준 2579번 파이썬 문제풀이(계단 오르기) - DP (0) | 2022.04.05 |
백준 1637번 파이썬 문제풀이(날카로운 눈) - 이분탐색 (0) | 2022.04.01 |
Comments