머리말
0/1 Knapsack 문제
DP로 유명한 문제이자 NP-hard 문제로 유명한 문제..
작년 알고리즘 수업시간 때 배웠던 부분이 기억이 잘 나지 않아 첨부하였다.
수업 노트
코드
n, k = map(int, input().split())
weights = [-1]
values = [-1]
for i in range(n):
w, v = map(int, input().split())
weights.append(w)
values.append(v)
dp = [[0] * (k + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
for w in range(1, k + 1):
if weights[i] <= w:
dp[i][w] = max(dp[i-1][w], values[i] + dp[i-1][w-weights[i]])
else:
dp[i][w] = dp[i-1][w]
print(dp[n][k])
더 읽을거리
'Algorithm' 카테고리의 다른 글
[Python] 백준 1865 : 웜홀 (Bellman Ford) (0) | 2022.10.04 |
---|---|
[Python] 백준 16500 : 문자열 판별 (dp) (0) | 2022.07.19 |
[Python] 프로그래머스 : 뉴스 클러스터링 (0) | 2022.07.07 |
[Python] 프로그래머스 : 괄호 변환 (0) | 2022.07.07 |
[Python] 프로그래머스 : 메뉴 리뉴얼 (구현) (0) | 2022.07.05 |