Algorithm/알고리즘 예제코드

Knapsack(배낭알고리즘)

let ting = [{
  v:0,
  w:0,
}];

 

  for(let i=1; i<=n; i++) { // n개의 물건. (세로)
    for(let j=1; j<=k; j++) { // k무게 까지. (가로) 
      if(ting[i].w <= j) {  // 가방에 물건을 넣을 수 있다.
        // (i번째 물건을 위해서 (i-1)번쨰 물건을 뺀다, i번째 물건을 넣지 않는다.)
        dp[i][j] = Math.max(ting[i].v + dp[i-1][j-ting[i].w], dp[i-1][j]);
      } 
      else if(ting[i].w > j) {  // 가방에 물건을 넣을 수 없다.
        dp[i][j] = dp[i-1][j];
      }
    }
  }

1. i 번째 물건이 배낭에 넣을 수 있는 무게인지 확인.

2. i 번째 물건을 넣기위해서 다른 물건을 빼고 넣을것인가? 아니면 i번째 물건을 넣지 않을 것인가.

'Algorithm > 알고리즘 예제코드' 카테고리의 다른 글

투 포인터  (0) 2022.06.09
[JS]MaxHeap  (0) 2022.02.23
부분합  (0) 2021.09.28
DP(동전 교환, LCS)  (0) 2021.09.16
소수판별  (0) 2021.09.16