diff --git "a/problems/0046.\346\220\272\345\270\246\347\240\224\347\251\266\346\235\220\346\226\231.md" "b/problems/0046.\346\220\272\345\270\246\347\240\224\347\251\266\346\235\220\346\226\231.md" index ce2d762e3b0f2ee5791beaea2cc295c3d2c2dc81..c460a0643ec277f0cdd86b1b56eec9073c88faf6 100644 --- "a/problems/0046.\346\220\272\345\270\246\347\240\224\347\251\266\346\235\220\346\226\231.md" +++ "b/problems/0046.\346\220\272\345\270\246\347\240\224\347\251\266\346\235\220\346\226\231.md" @@ -244,6 +244,69 @@ print(solution_obj.knapsack_2D(n=n, capacity=capacity, weights=weights, values=v ## JS +const readline = require('readline') + +// 定义接口 +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) + +const inputs = [] + +function bagProblem(){ + rl.on('line', (input) => { + inputs.push(input.split(' ').map(Number)) + if(inputs.length === 3){ + + // 逻辑开始 + const len = inputs[0][0] + const size = inputs[0][1] + const weight = inputs[1] + const value = inputs[2] + + // 二维实现 + // console.log(len, size, weight, value) + // 创建dp数组 + // const dp = new Array(len).fill(0).map(() => new Array(size + 1).fill(0)) + // // dp[i][j]表示将材料0到材料i放入大小为j的背包的最大价值 + + // // 初始化 + // for(let j = weight[0]; j <= size; j++) dp[0][j] = value[0] + + // // 递推 + // // 遍历物品 + // for(let i = 1; i < len; i++){ + // // 遍历背包 + // for(let j = 1; j <= size; j++){ + // // 如果背包容量j大于物品i的容量,那放不进去 + // if(j < weight[i]) dp[i][j] = dp[i - 1][j] + // // 如果放物品i,求最大价值 + // else dp[i][j] = Math.max(dp[i - 1][j - weight[i]] + value[i], dp[i - 1][j]) + // } + // } + + // // 打印输出 + // console.log(dp[len - 1][size]) + + // 一维实现 + const dp = new Array(size + 1).fill(0) + // 初始化: 全部初始化为0即可 + for(let i = 0; i < len; i++){ + // 倒序遍历 + for(let j = size; j >= weight[i]; j--){ + dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]) + } + } + + console.log(dp[size]) + + + } + }) +} + +bagProblem() ## Go