본문 바로가기
백준

평범한 배낭 - 12865번

by 청원뿔세포 2022. 12. 10.

동적계획법으로 해결할 수 있는 문제이다.

배낭에 담을 물건을 쪼깨어 일부분만 담을 수 있다면 그리디로 풀 수 있지만,

그렇지 않기 때문에 동적계획법을 써줬다.

만약 가방의 무게가 20이고, 들어갈 수 있는 물건 5개가 다음과 같다면,

무게, 가치

2 3

3 4

4 8

5 8

9 10

동적계획법의 표현결과는 다음과 같다.

 

 

n,k = map(int,input().split())
jewels=[[0,0]]
for i in range(n):
    inn = list(map(int,input().split()))
    jewels.append(inn)

dp = [[0]*(k+1) for i in range(n+1)]
for gem in range(1, n+1):
    for bag_weight in range(1, k+1):
        if bag_weight >= jewels[gem][0]:
            dp[gem][bag_weight] = max(dp[gem-1][bag_weight], jewels[gem][1] + dp[gem-1][bag_weight-jewels[gem][0]])
        else:
            dp[gem][bag_weight] = dp[gem-1][bag_weight]
print(dp[n][k])

 

'백준' 카테고리의 다른 글

[python] 별꽃의 세레나데 (Easy) - 26217번  (0) 2022.12.13
눈 치우기 - 26215번  (0) 2022.12.12
출제비 재분배 - 26145번  (0) 2022.12.10
큐빙 - 5373번  (0) 2022.12.08
Identify, Sort, Index, Solve - 26150번  (0) 2022.12.04

댓글