mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 20:40:39 +08:00
Merge pull request #1314 from Jamcy123/背包理论基础01背包-1
背包理论基础01背包-1 JavaScript 版本修改 原版有误 无法运行
This commit is contained in:
@ -380,53 +380,31 @@ func main() {
|
|||||||
### javascript
|
### javascript
|
||||||
|
|
||||||
```js
|
```js
|
||||||
/**
|
function testWeightBagProblem (weight, value, size) {
|
||||||
*
|
// 定义 dp 数组
|
||||||
* @param {Number []} weight
|
const len = weight.length,
|
||||||
* @param {Number []} value
|
dp = Array(len).fill().map(() => Array(size + 1).fill(0));
|
||||||
* @param {Number} size
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
|
|
||||||
function testWeightBagProblem(weight, value, size) {
|
// 初始化
|
||||||
const len = weight.length,
|
for(let j = weight[0]; j <= size; j++) {
|
||||||
dp = Array.from({length: len}).map(
|
dp[0][j] = value[0];
|
||||||
() => Array(size + 1)) //JavaScript 数组是引用类型
|
|
||||||
for(let i = 0; i < len; i++) { //初始化最左一列,即背包容量为0时的情况
|
|
||||||
dp[i][0] = 0;
|
|
||||||
}
|
|
||||||
for(let j = 1; j < size+1; j++) { //初始化第0行, 只有一件物品的情况
|
|
||||||
if(weight[0] <= j) {
|
|
||||||
dp[0][j] = value[0];
|
|
||||||
} else {
|
|
||||||
dp[0][j] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(let i = 1; i < len; i++) { //dp[i][j]由其左上方元素推导得出
|
|
||||||
for(let j = 1; j < size+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]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dp[len-1][size] //满足条件的最大值
|
|
||||||
}
|
|
||||||
|
|
||||||
function testWeightBagProblem2 (wight, value, 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];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// weight 数组的长度len 就是物品个数
|
||||||
|
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];
|
||||||
|
else dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.table(dp)
|
||||||
|
|
||||||
|
return dp[len - 1][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));
|
||||||
}
|
}
|
||||||
|
|
||||||
test();
|
test();
|
||||||
|
Reference in New Issue
Block a user