728x90
반응형
<설명>
냅색 알고리즘은 DP(Dynamic Programming)의 한 종류로 많이 쓰이는 방식 중 하나이다.
가방문제에 가장 많이 등장한다!
가방에 담을 수 있는 무게 제한이 있고, 각각의 물건은 무게와 가치가 있다. 가방의 무게를 초과하지 않게 물건을 많이 담아 최고 가치를 가지게 하는 문제이다.
<구현>
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)
<예시 문제>
https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
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
728x90
반응형
'# Coding > # Algorithm' 카테고리의 다른 글
[Python] 트리의 지름을 구하는 법 (0) | 2022.04.22 |
---|---|
[보기 쉬운 Algorithm] 깊이 우선 탐색(DFS) - Python (0) | 2021.03.19 |
[보기 쉬운 Algorithm] 너비 우선 탐색(BFS) - Python (0) | 2021.03.19 |
[보기 쉬운 Algorithm] 다익스트라(Dijkstra) 알고리즘 - Python (0) | 2021.03.18 |