const slices = [1, 8, 6, 11, 2, 7, 1, 1, 7];
const l = slices.length;
const n = 3;// 选择不大于三个数(但是这三个数不能相邻) 如同背包问题 最多选择所有给定的物品进去(物品可以相邻)
const dp = new Array(l + 1).fill(0).map((e) => new Array(n + 1).fill(0));
for (let i = 1; i <= l; i++) {
for (let j = 1; j <= n; j++) {
if (i > 1) {
dp[i][j] = Math.max(dp[i - 2][j - 1] + slices[i - 1], dp[i - 1][j]);
} else {//第一个数据
dp[i][j] = slices[i - 1];
}
}
}
console.log(dp);
数组的选择n个不相邻的数的最大值【动态规划】
于 2022-05-26 18:28:31 首次发布