728x90
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())
items = []
dp = [0 for _ in range(K+1)]
for i in range(N):
w,v = map(int,input().split())
for j in range(K,w-1,-1):
dp[j] = max(dp[j],dp[j-w]+v)
print(dp[-1])
dp[j] : 가방에 j 무게 물건이 있을 때의 가치
dp[j-w]+v : w 무게만큼의 물건을 넣는다.
여기서 주의해야할 점은 물건들이 무한대(?)로 있는 것이 아니라 하나 뿐이라는 것이다.
즉, for j 를 K에서부터 -1씩 줄여가며 채워야한다.
만약 w에서부터 채운다면 한 물건이 2번 들어가는 경우가 생기기 때문이다.
만약 물건이 무한대로 있다면 앞에서부터 채워야한다.
김태원 강의에서는 무한대로 들어갈 수 있는 문제를 풀어서 몇번 틀렸다가 카톡방에 물어보고 겨우 알았다.
조건을 세세하게 살펴봐야한다.
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[Python/BOJ] 백준 15927 회문은 회문이 아니야!!_문자열 (0) | 2022.08.10 |
---|---|
[삼성SW역량][Python/BOJ] 백준 17143 낚시왕_구현 (0) | 2022.08.10 |
[Python/백준]2136 개미 (0) | 2022.08.05 |
[Python/BOJ] 백준 1027 고층 건물(구현) (0) | 2022.08.05 |
[삼성SW역량][Python/BOJ] 백준 21609 상어 중학교(구현) (0) | 2022.08.03 |