문제
https://www.acmicpc.net/problem/12865
12865번: 평범한 배낭
첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)
www.acmicpc.net
풀이
* 위 영상을 참고했음
코드
n, k = map(int, input().split())
board = [ [0] * (k+1) for _ in range(n+1) ]
bags = [(0, 0)]
for _ in range(n):
w, v = map(int, input().split())
bags.append((w, v))
for i in range(1, n+1):
for j in range(1, k+1):
w = bags[i][0]
v = bags[i][1]
# 무게가 넘는다면
if j < w:
board[i][j] = board[i-1][j]
# 그렇지 않다면
else:
board[i][j] = max(board[i-1][j], board[i-1][j - w] + v)
print(board[n][k])
후기
DP문제는 '작은 문제로 나누는 것' 부터 천천히 시작하면, 접근이 가능한 거 같다.
또한 이러한 문제와 비슷한 문제가 많기에.. 최대한 익숙해지면서 풀 수 있도록 노력해야겠다.
'백준' 카테고리의 다른 글
3190 - 뱀 (0) | 2023.06.21 |
---|---|
1010 - 다리 놓기 (0) | 2023.06.19 |
12100 - 2048 (Easy) (0) | 2023.06.18 |
15685 - 드래곤 커브 (0) | 2023.06.18 |
17141 - 연구소 2 (1) | 2023.06.14 |