본문 바로가기

# Coding/# 백준

[백준 / 12865] 평범한 배낭 - Python

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

 

<풀이>

냅색 알고리즘(Knapsack Algorithm)

(처음에는 재귀함수로 다 모든 경우를 계산해서 시간이 너무 오래 걸렸다.)

 

 

 

<전체 코드>

n, k = map(int, input().split())

table = [[0]*(k+1) for _ in range(n+1)]

thing = [[0, 0]]

for i in range(n):
    thing.append(list(map(int, input().split())))

for i in range(1, n+1):
    for j in range(1, k+1):
        w = thing[i][0]   # 물건의 무게
        v = thing[i][1]   # 물건의 가치

        if j < w:   # 현재 무게가 물건 보다 작다면
            table[i][j] = table[i-1][j]  # 위의 값을 그대로
        else:
            table[i][j] = max(table[i-1][j], table[i-1][j-w]+v)
print(table[n][k])
728x90
반응형

'# Coding > # 백준' 카테고리의 다른 글

[백준 / 3190] 뱀 - Python  (0) 2021.12.23
[백준 / 15686] 치킨 배달 - Python  (0) 2021.12.21
[백준 / 9251] LCS - Python  (0) 2021.12.14
[백준 / 1034] 램프 - Python  (0) 2021.12.10
[백준 / 1013] Contact - Python  (0) 2021.12.02