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 |