Skip to content

Commit 8370880

Browse files
committed
[BOJ] #12865. 평범한배낭 / 골드5 / 60분 / 힌트,성공
1 parent 929e2ed commit 8370880

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# 입력
5+
N, K = map(int, input().split()) # N: 물품의 수, K: 버틸 수 있는 무게
6+
items = [[0, 0]]
7+
for _ in range(N):
8+
items.append(list(map(int, input().split())))
9+
10+
# DP 채우기
11+
knapsack = [[0] * (K+1) for _ in range(N+1)] # DP표는 0~K+1, 0~N+1로 구성
12+
13+
for i in range(1, N+1):
14+
for j in range(1, K+1):
15+
weight = items[i][0]
16+
value = items[i][1]
17+
18+
if j >= weight: # "현재최대무게j가 해당물건무게 weight보다 큰 경우
19+
# 표의 윗 셀의 값과 현재물건의 value + 이전물건의 value값의 최댓값을 knapsack[i][j]에 저장
20+
knapsack[i][j] = max(knapsack[i-1][j], knapsack[i-1][j-weight] + value)
21+
else: # # "현재최대무게j가 해당물건무게 weight 보다 작은 경우 (현재 물건을 담을 수 없는 경우)
22+
# 이전 값을 가져온다.
23+
knapsack[i][j] = knapsack[i-1][j]
24+
25+
# 최대 가치
26+
print(knapsack[N][K])

0 commit comments

Comments
 (0)