IT/Algorithm

[python] 백준 12865: 평범한 배낭

imsunbow 2025. 3. 18. 15:31

 

https://www.acmicpc.net/problem/12865

 

dp 문제이다. 

 

#백준 12865: 평범한 배낭


n,k = map(int,input().split())
dp = [[0]*(k+1) for _ in range(n+1)]


for i in range(1,n+1):
w,v = map(int,input().split())
for j in range(1,k+1): #무게 1->k까지
if j < w: #j가 w보다 작으면
dp[i][j] = dp[i-1][j] #이전값을 그대로
else: #j가 w보다 크거나 같으면
dp[i][j] = max(dp[i-1][j],dp[i-1][j-w]+v) #이전값 or 이전값에서 w를 뺀값+현재값 중 큰값으로 업데이트
 
print(dp[n][k])

 

핵심 아이디어: 점화식을 사용하여 물건을 선택하지 않는 경우와 물건을 선택하는 경우를 비교하여 max값을 업데이트 하여 누적시키는 방법으로 값을 구한다. 

반응형

'IT > Algorithm' 카테고리의 다른 글

[python] 백준 2805: 나무 자르기  (0) 2025.03.20
[python] 백준 1932: 정수 삼각형  (0) 2025.03.19
[python] 백준 25306: 연속 XOR  (0) 2025.03.17
[python] 백준 1904: 01타일  (0) 2025.03.16
[python] 백준 1024: 수열의 합  (0) 2025.03.15