SOURCE

 /**
 * 例子:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。
 * 每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 
 * 
 *  dp[i][j]含义:表示从下标为[0-i]的物品里任意取,放进最大容量为j的背包,价值总和的最大值。
 */


let weights = [1,3,4], values= [15,20,30], packageWeight = 4

function findMaxContent (weights, values, packageWeight) {
    const len = weights.length
    let dp = Array(len).fill(0).map(_ => Array(len).fill(0))

    for(let j=weights[0]; j<=packageWeight; j++) {
            dp[0][j] = values[0]
    }

    for(let i=1; i<weights.length; i++) {
        for(let j=0; j<=packageWeight; j++) {
            // 1、放不下物品i的话,最大值就是dp[i-1][j] 
            if(weights[i] > j) dp[i][j] = dp[i-1][j] 
            // 2、能放不下物品i的话,自己画出dp推导就知道了 不好表述
            else dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-weights[i]] + values[i])
        }
    }
    console.log(dp)
    return dp[len-1][packageWeight]
}

findMaxContent(weights, values, packageWeight)
console 命令行工具 X clear

                    
>
console