一、0-1背包
1.1.题目描述
有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
//二维数组
function bag(w, v, s) {
const dp = new Array(w.length + 1).map((item) => Array(s + 1).fill(0));
for (let i = 1; i <= w.length; i++) {
for (let j = 0; j <= s; j++) {
if (w[i - 1] <= j) {
dp[i][j] = Math.max(dp[i - 1][j],
dp[i - 1][j - w[i - 1]] + v[i - 1]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[(w.length, s)];
}
//一维数组
function bag(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];
}
本文详细介绍了0-1背包问题的动态规划解决方案,通过两种函数实现,帮助理解如何求解物品价值最大化问题。从二维数组到一维数组的转换,以及如何利用状态转移方程求解,适合初学者和进阶者参考。
293

被折叠的 条评论
为什么被折叠?



