DP | 작은 부분 문제 해결

호떡·2022년 10월 23일
0
  1. 완전 탐색을 생각한다.
  2. 작은 부분 문제부터 해결해나간다.
  3. 상향식으로 코드를 구현한다.

완전탐색

모든 아이템에 대해 모든 kg에 대해 완전탐색을 한다. 가방이 10kg 이라면, 1kg부터 10kg까지 모든 최적해를 구해나간다. 우리가 원하는 건 마지막 아이템까지 검사한 마지막 10kg에 대한 최적해를 구하는 것이다.

작은 부분 문제 해결

dp[i][w] = Math.max(dp[i-1][w], dp[i-1][ w - weights[i] ] + profits[i]);

i-1 이란 것은 i번째 물건을 채우기 전 상태를 뜻하는데,
(i번째 물건을 채우기 전 상태에서) i번째 물건을 담지 않을 경우와
(i번째 물건을 채우기 전 상태에서) i번째 물건을 담을 경우(이 경우 해당 i번째 물건의 가치 더해주기)
두 가지 경우의 최적해에서 최대값이 해당 i에서 최적해가 되는 것이다.


📌 예제. 배낭문제(Knapsack)


상향식으로 구현

0개의 댓글