크래프톤 정글 6기 TIL - Day 16 | Knapsack Problem
by 브이담곰
Knapsack Problem
배낭의 최대 용량이 W일 떄, 배낭이 찢어지지 않는 선에서 가격 합이 최대가 되도록 보석을 담는 방법.
- i 번째 보석이 배낭의 한도보다 무거우면 안되므로, i번째 보석을 뺀 i-1개의 보석들을 가지고 구한 전단계의 최적값을 그대로 가지고 온다.
- 그렇지 않은 경우 , i번째 보석을 위해 i번째 보석 만큼의 무게를 비웠을 때, 최적 값에 i번째 보석의 가격을 더한 값 or i-1개의 보석들을 가지고 구한 전단계의 최적값 중 큰걸 선택한다.
12865. 평범한 배낭
https://www.acmicpc.net/problem/12865
import sys
input = sys.stdin.readline
# 물품의 수, 배낭의 최대 무게
N, K = map(int, input().split())
Weights = [0 for _ in range(N+1)]
Value = [0 for _ in range(N+1)]
for i in range(1,N+1):
W,V = map(int, input().split())
Weights[i] = W
Value[i] = V
# 가치합의 최댓값 구하기
results = [ [0 for _ in range(K+1)] for _ in range(N+1)] #2차원 배열에 경우에 따른 최대값을 저장해둔다.
for i in range(1,N+1):
for w in range(1,K+1):
if w - Weights[i] >= 0:
# 그전 무게를 넣었을 때와 가치비교해서 높은 가치를 넣는다.
results[i][w] = max(results[i-1][w],results[i-1][w-Weights[i]]+Value[i]) # 자리가 남으면 들어갈수잇는 가치가 높은 다른 물건을 넣는다.
else:
results[i][w] = results[i-1][w]
print(results[N][K])
# 문제를 잘못봐가지고 중복값이 있는줄알았다ㅠㅜㅠ 흑흑 드냥 다 배열로 해서 품
'KRAFTON JUNGLE > JUNGLE TIL' 카테고리의 다른 글
크래프톤 정글 6기 TIL - Day 18 | 포인터와 배열 (0) | 2024.07.27 |
---|---|
크래프톤 정글 6기 TIL - Day 17 | 포인터(pointer), & 연산자와 * 연산자 (0) | 2024.07.26 |
크래프톤 정글 6기 TIL - Day 15 | DP, 그리디, LCS (1) | 2024.07.19 |
크래프톤 정글 6기 TIL - Day 14 | 다익스트라, 플로이드 와샬 (3) | 2024.07.16 |
크래프톤 정글 6기 TIL - Day 13| 최소 신장 트리, 유니온 알고리즘 (0) | 2024.07.14 |
블로그의 정보
농담곰담곰이의곰담농
브이담곰