SOURCE

// 给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。
// 其中第 i 个物品的重量为 wt[i],价值为 val[i],
// 现在让你用这个背包装物品,最多能装的价值是多少?

/**
示例:
N = 3, W = 4
wt = [2, 1, 3]
val = [4, 2, 3]
 */

const knapsack = (N, W, wt, val) => {
    if (N <=0 || W <= 0) return 0;
    const dp = [];
    for (let i = 0; i < N; i++) {
        dp[i] = [];
        for (let j = 0; j < W; j++) {
            dp[0][j] = 0;
        }
        dp[i][0] = 0;
    }
    console.log('dp start', dp);
    for (let i = 1; i <= N; i++) {
        for (let j = 1; j<= W; j++) {
            if (W - wt[i - 1] < 0) {
                dp[i][j] = dp[i - 1][j];
            } else {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][W - wt[i-1]] + val[i - 1]);
            }
        }
    }
    console.log('dp end', dp);
}

knapsack(3, 4, [2, 1,3], [4, 2, 3]);
console 命令行工具 X clear

                    
>
console