function knapsack(weights, values, W) {
    var n = weights.length;
    var dp = new Array(n).fill([]);

    for (var i = 0; i < n; ++i) {
        for (var j = 0; j <= W; ++j) {
            /* 容量为V 等号 */
            if (i > 0) {
                dp[i][j] = dp[i - 1][j];
                if (j >= dp[i]) {
                    /* 等号 */
                    var tmp = dp[i - 1][j - weights[i]] + values[i];
                    dp[i][j] = tmp > dp[i][j] ? tmp : dp[i][j];
                }
            } else {
                /* 数组第0行赋值 */
                if (j >= weights[0]) {
                    dp[0][j] = values[0];
                }
            }
        }
    }
    return dp; //在目前背包情况下能装下的最大价值
}
