코딩

[백준] 12865 평범한 배낭 #python 본문

코딩테스트

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

ssooyn_n 2021. 5. 31. 20:11

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

 

Input

4 7

6 13

4 8  

3 6

5 12

DP 0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1(6, 13) 0 0 0 0 0 13 13
2(4, 8) 0 0 0 0 8 8 13 13
3(3, 6) 0 0 0 6 8 8 13 14
4(5, 12) 0 0 0 6 8 12 13 14

현재물건(row), 현재 배낭에 최대로 넣을 수 있는 무게(column) 

dp[i][j] = 배낭에 최대로 넣을 수 있는 무게에서, max(현재 물건을 넣었을때의 가치 , 현재 물건을 넣지않았을때의 가치)

단, 이 때 배낭의 최대무게가 현재물건의무게보다 작으면, 현재물건을 넣을 수 없으므로 이 전의 물건들의 최대 가치를 저장해준다.

 

n, weight = map(int, input().split())
arr = [(0, 0)]

for _ in range(n):
    a, b = map(int, input().split())
    arr.append((a, b))

dp = [[0]*(weight+1) for _ in range(n+1)] # dp생성

for i in range(1, n+1):
    tmp_w, tmp_v = arr[i][0], arr[i][1]
    for j in range(1, weight+1):
        if j < tmp_w:
            dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = max(dp[i-1][j-tmp_w]+tmp_v, dp[i-1][j])

print(dp[-1][-1])

 

 

'코딩테스트' 카테고리의 다른 글

[python] 최단경로 정리  (0) 2021.07.03
[백준] 17298 오큰수 #python  (0) 2021.06.03
[백준] 1561 놀이공원 #python  (0) 2021.05.05
[프로그래머스] 동굴탐험 #python  (2) 2021.04.29
[백준] 14501 퇴사 .py  (0) 2021.03.24
Comments