Merge pull request #1314 from Jamcy123/背包理论基础01背包-1

背包理论基础01背包-1 JavaScript 版本修改  原版有误 无法运行
This commit is contained in:
程序员Carl
2022-06-01 08:20:06 +08:00
committed by GitHub

View File

@ -380,50 +380,28 @@ func main() {
### javascript ### javascript
```js ```js
/**
*
* @param {Number []} weight
* @param {Number []} value
* @param {Number} size
* @returns
*/
function testWeightBagProblem (weight, value, size) { function testWeightBagProblem (weight, value, size) {
// 定义 dp 数组
const len = weight.length, const len = weight.length,
dp = Array.from({length: len}).map( dp = Array(len).fill().map(() => Array(size + 1).fill(0));
() => Array(size + 1)) //JavaScript 数组是引用类型
for(let i = 0; i < len; i++) { //初始化最左一列即背包容量为0时的情况 // 初始化
dp[i][0] = 0; for(let j = weight[0]; j <= size; j++) {
}
for(let j = 1; j < size+1; j++) { //初始化第0行, 只有一件物品的情况
if(weight[0] <= j) {
dp[0][j] = value[0]; dp[0][j] = value[0];
} else {
dp[0][j] = 0;
}
} }
for(let i = 1; i < len; i++) { //dp[i][j]由其左上方元素推导得出 // weight 数组的长度len 就是物品个数
for(let j = 1; j < size+1; j++) { for(let i = 1; i < len; i++) { // 遍历物品
for(let j = 0; j <= size; j++) { // 遍历背包容量
if(j < weight[i]) dp[i][j] = dp[i - 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]); else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
} }
} }
return dp[len-1][size] //满足条件的最大值 console.table(dp)
}
function testWeightBagProblem2 (wight, value, size) { return dp[len - 1][size];
const len = wight.length,
dp = Array(size + 1).fill(0);
for(let i = 1; i <= len; i++) {
for(let j = size; j >= wight[i - 1]; j--) {
dp[j] = Math.max(dp[j], value[i - 1] + dp[j - wight[i - 1]]);
} }
}
return dp[size];
}
function test () { function test () {
console.log(testWeightBagProblem([1, 3, 4, 5], [15, 20, 30, 55], 6)); console.log(testWeightBagProblem([1, 3, 4, 5], [15, 20, 30, 55], 6));