Skip to content
On this page

个人理解动态规划是递推公式,是后面的结果需要依赖前面的计算结果才能成立。

举个例子 打家劫舍 I

求小偷偷到最大金额。

js
[1, 2, 3, 4];
// 只有 1 间房可以偷: 1
// 只有 2 间房可以偷: Math.max(1, 2)
// 只有 3 间房可以偷: 1 + 3 > 2 => 4
// 第 i 间房:dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i])
// Math.max(隔壁那间房,相邻那件房 + 现在这间房)

递推得公式:

js
var rob = function (nums) {
  let dp = [nums[0], Math.max(nums[0], nums[1])];
  let len = nums.length;
  for (let i = 2; i < len; i++) {
    dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
  }
  return dp[len - 1];
};

Released under the MIT License.