[백준]평범한 배낭

2020. 8. 16. 23:561일 1 알고리즘

이번에는 배낭에 넣을수 있는 물건들의 가치의 최댓값을 보여주는 알고리즘을 구하여봅니다.

import sys

N, K = map(int, input().split())
stuff = [[0,0]]
knapsack = [[0 for _ in range(K + 1)] for _ in range(N + 1)]

for _ in range(N):
    stuff.append(list(map(int, input().split())))

for i in range(1, N + 1):
    for j in range(1, K + 1):
        weight = stuff[i][0] 
        value = stuff[i][1]
       
        if j < weight:
            knapsack[i][j] = knapsack[i - 1][j] 
        else:
            knapsack[i][j] = max(value + knapsack[i - 1][j - weight], knapsack[i - 1][j])

print(knapsack[N][K])

수식으로 표현하면 다음과 같습니다

knapsack[i][j] = max(현재 물건 가치 + knapsack[이전 물건][현재 가방 무게 - 현재 물건 무게], knapsack[이전 물건][현재 가방 무게])

knapsack[i][j] = max(value + knapsack[i - 1][j - weight], knapsack[i - 1][j])

 

 

'1일 1 알고리즘' 카테고리의 다른 글

회의실배정  (0) 2020.08.18
[백준]동전 0  (0) 2020.08.17
[백준] 연속합  (0) 2020.08.16
[백준]LCS  (0) 2020.08.15
[백준]가장 긴 증가하는 부분 수열  (0) 2020.08.15