《动态规划》刷题训练

在这里插入图片描述

打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。

题目解析

动态规划问题的特点:

  • 问题可以被划分为若干重叠子问题
  • 子问题可以通过已知的子问题求解,且子问题可以重复利用
  • 需要一个数据结构来存储子问题的解,以便在使用时取出

为什么这题能够使用动态规划?

  • 重叠子问题:
    设总共有 n n n家房屋,原问题则为有 n n n家房屋时所能偷窃到的最大金额。
    该问题能够划分为成若干重叠子问题:有 k ( k = 1 … … n − 1 ) k(k=1……n-1) k(k=1……n1)家房屋时能够偷窃到的最大金额
  • 子问题可以通过求解的子问题求解:
    k k k家房屋时,能够偷窃的最大金额:
    • k k k家不偷窃时,最大金额 = 当房屋为 k − 1 k-1 k1时,最大偷窃的金额
    • k k k家偷窃时,最大金额 = 第 k − 1 k-1 k1不偷窃时,最大金额 + 第 k k k家房屋能偷的钱= 当房屋为 k − 2 k-2 k2时,最大偷窃的金额 + 第 k k k家房屋能偷的钱

解题步骤:

  • 将原问题转化为一个或多个子问题
  • 定义问题的状态转移方程
  • 设置边界条件
  • 计算子问题的解并记录
  • 由子问题的解得到原问题的解
  • 问题【当有 k k k家房屋时,被偷窃最大的金额】可划分为(从左向右看):
    • k k k家不偷窃时,最大金额
    • k k k家偷窃时,最大金额
  • 状态转移方程:
    • 子问题为【第 k k k家不偷窃时,最大金额】:
      k k k家不偷窃,那么第 k k k家肯定不会构成相邻的非法条件。此时可以当第 k k k家不存在,所以问题变成:【房屋数量为 k − 1 k-1 k1时的最大偷窃金额】
    • 子问题为【第 k k k家偷窃时,最大金额】:
      此时第 k − 1 k-1 k1家肯定不能进行偷窃,否则会触发报警器。因此第
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值