250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 낙관적락
- querydsl
- 지연로딩
- exclusive lock
- PS
- JPQL
- BOJ
- 유니크제약조건
- 연관관계
- execute
- SQL프로그래밍
- fetch
- 일대다
- 스프링 폼
- 데코레이터
- dfs
- 다대다
- shared lock
- 이진탐색
- CHECK OPTION
- FetchType
- 즉시로딩
- 다대일
- 연결리스트
- 동적sql
- 스토어드 프로시저
- 백트래킹
- eager
- 비관적락
- 힙
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
[노트] 0-1 KnapSack Problem 본문
728x90
# 배낭 문제
- n개의 물건과 배낭이 있고, 각 물건에 대해 가치와 무게가 알려져 있다.
- 배낭의 최대 용량을 초과하지 않으면서 배낭에 담을 수 있는 최대 가치는?
- 배낭문제는 물건을 쪼갤 수 있는 Fraction Knapsack Problem과 물건을 쪼갤 수 없는 0-1 KnapSack Problem이 있다.
- 배낭문제는 대표적인 DP 문제이다.
https://www.acmicpc.net/problem/12865
N, K = map(int, input().split())
weight = [0]
value = [0]
for _ in range(N):
w, v = map(int, input().split())
weight.append(w)
value.append(v)
t = [[0]*(K+1) for _ in range(N+1)]
for i in range(1, N+1):
for w in range(1, K+1):
if weight[i] > w:
t[i][w] = t[i-1][w]
else:
val_with = value[i] + t[i-1][w-weight[i]]
val_without = t[i-1][w]
t[i][w] = max(val_with, val_without)
print(t[N][K])
'Algorithm' 카테고리의 다른 글
이진트리 - 전위/중위/후위 순회 재귀&스택 구현 (0) | 2024.04.16 |
---|---|
효율적으로 거듭제곱 계산하기 (2) | 2024.01.05 |
그래프 알고리즘- union·find, mst - kruskal·prim, topology (0) | 2023.12.28 |
외판원 문제 (Traveling Salesman Problem, TSP) (0) | 2022.03.16 |
탐욕 알고리즘 (Greedy Algorithm) (0) | 2022.01.06 |