diff --git a/problems/背包理论基础01背包-1.md b/problems/背包理论基础01背包-1.md index fe940b4c..d6bc5520 100644 --- a/problems/背包理论基础01背包-1.md +++ b/problems/背包理论基础01背包-1.md @@ -380,28 +380,37 @@ func main() { ### javascript ```js -function testweightbagproblem (wight, value, size) { - const len = wight.length, - dp = array.from({length: len + 1}).map( - () => array(size + 1).fill(0) - ); - - for(let i = 1; i <= len; i++) { - for(let j = 0; j <= size; j++) { - if(wight[i - 1] <= j) { - dp[i][j] = math.max( - dp[i - 1][j], - value[i - 1] + dp[i - 1][j - wight[i - 1]] - ) - } else { - dp[i][j] = dp[i - 1][j]; - } - } - } +/** + * + * @param {Number []} weight + * @param {Number []} value + * @param {Number} size + * @returns + */ -// console.table(dp); +function testWeightBagProblem(weight, value, size) { +const len = weight.length, +dp = Array.from({length: len}).map( +() => Array(size + 1)) //JavaScript 数组是引用类型 +for(let i = 0; i < len; i++) { //初始化最左一列,即背包容量为0时的情况 +dp[i][0] = 0; +} +for(let j = 1; j < size+1; j++) { //初始化第0行, 只有一件物品的情况 +if(weight[0] <= j) { +dp[0][j] = value[0]; +} else { +dp[0][j] = 0; +} +} + +for(let i = 1; i < len; i++) { //dp[i][j]由其左上方元素推导得出 +for(let j = 1; j < size+1; j++) { +if(j < weight[i]) dp[i][j] = dp[i - 1][j]; +else dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i]); +} +} - return dp[len][size]; +return dp[len-1][size] //满足条件的最大值 } function testWeightBagProblem2 (wight, value, size) {