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 |