-
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
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%2012865
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 딱 전형적인 냅색 문제였다.
물건수와 물건의 무게 가치가 주어지고, 배낭의 무게가 주어졌을 때
배낭의 무게를 넘지 않으면서 가장 높은 가치를 가지는 경우를 찾는 문제다.
해당 문제는 DP를 이용해서 해결했으며, 각각 입력값들은 입력 처리한 뒤
DP 배열을 생성하여 역순으로 반복하는데 이때
물건 수만큼 반복하면서 그 안에서 역순으로 반복하면서 만약 현제 배열 인덱스에서
무게를 뺸 값이 0보다 작다면 지금 반복문을 멈추고 그렇지 않다면
dp 배열에 지금 dp 배열 값과 해당 물건에 무게 값과 해당 물건의 무게 값을 가방에서 뺀 값의 가치 학과
비교를 해서 가장 최댓값을 갱신해 주는 방식으로 진행한다.
위의 그림처럼 진행된다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1389 케빈 베이컨의 6단계 법칙 JAVA (0) 2021.11.12 Baekjoon 11053 가장 긴 증가하는 부분 수열 JAVA (0) 2021.11.12 Baekjoon 1600 말이 되고픈 원숭이 JAVA (0) 2021.11.12 Baekjoon 2636 치즈 JAVA (0) 2021.11.12 Baekjoon 17472 다리 만들기 2 JAVA (0) 2021.11.12 댓글