题目选自Leetcode 213. 打家劫舍||

给定一个代表金额的非负整数数组nums,相邻房间不可偷并且房间是围成一圈的,让我们输出可以偷窃到的最高金额。

题目描述:

解题思路:

这三种情况哪个结果最大,就是最终答案。其实,情况一的结果肯定最小,我们只要比较情况二和情况三就行了,因为这两种情况对于房子的选择余地比情况一大,房子里的钱数都是非负数,所以选择余地大,最优决策结果肯定不会小

把打家劫舍 | 的解法稍加改造即可。

状态计算

因此,我们选用两个DP数组来进行求解

下标初始化0开始的方法

DP数组的定义

int dp1[101] = {0}, dp2[101] = {0};

两种方案DP数组的初始化

dp1[0] = nums[0]; dp1[1] = fmax(nums[0],nums[1]);

dp2[0] = 0 ; dp2[1] =nums[1];

两种DP的递推循环过程

for(int i = 2 ; i < numsSize - 1 ; i++)dp1[i] = fmax(dp1[i-2] + nums[i] , dp1[i-1]);for(int i = 2 ; i < numsSize ; i++)dp2[i] = fmax(dp2[i-2] + nums[i] , dp2[i-1]);

最终结果

return fmax(dp1[numsSize-2],dp2[numsSize-1]);

解题代码:C++

class Solution {
public:int rob(vector<int>& nums) {int numsSize = nums.size();if(numsSize == 1) return nums[0];int dp1[101] = {0}, dp2[101] = {0};dp1[0] = nums[0]; dp1[1] = fmax(nums[0],nums[1]);dp2[0] = 0 ; dp2[1] =nums[1];for(int i = 2 ; i < numsSize - 1 ; i++)dp1[i] = fmax(dp1[i-2] + nums[i] , dp1[i-1]);for(int i = 2 ; i < numsSize ; i++)dp2[i] = fmax(dp2[i-2] + nums[i] , dp2[i-1]);return fmax(dp1[numsSize-2],dp2[numsSize-1]);}
};

解题代码:C语言

int rob(int* nums, int numsSize){if(numsSize == 1) return nums[0];int dp1[101] = {0}, dp2[101] = {0};dp1[0] = nums[0]; dp1[1] = fmax(nums[0],nums[1]);dp2[0] = 0 ; dp2[1] =nums[1];for(int i = 2 ; i < numsSize - 1 ; i++)dp1[i] = fmax(dp1[i-2] + nums[i] , dp1[i-1]);for(int i = 2 ; i < numsSize ; i++)dp2[i] = fmax(dp2[i-2] + nums[i] , dp2[i-1]);return fmax(dp1[numsSize-2],dp2[numsSize-1]);
}

动态规划——打家劫舍||(Leetcode 213)相关推荐

  1. 动态规划——打家劫舍(Leetcode 198)

    题目选自Leetcode 198 打家劫舍 动态规划解法: 详解过程 如果你对动态规划还不够了解,不着急,咱慢慢来~~ 解题代码: class Solution { public:int rob(ve ...

  2. [动态规划|字符串] leetcode 5 最长回文子串

    [动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...

  3. 【必备算法】动态规划:LeetCode题(九)309. 最佳买卖股票时机含冷冻期,714. 买卖股票的最佳含手续费

    买卖股票系列: [必备算法]动态规划:一个思路解决六道股票问题 [必备算法]动态规划:LeetCode题(七)121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II [必备算法]动态规划:L ...

  4. 103. Leetcode 213. 打家劫舍 II (动态规划-打家劫舍)

    步骤一.确定状态: 确定dp数组及下标含义 dp数组和房屋数一样大小, dp[i]表示到第i个房屋的时候, 能够偷窃到的最 高金额 步骤二.推断状态方程: 对于当前的dp[i], 有两个方向,取决于能 ...

  5. LeetCode 213. 打家劫舍 II(动态规划)

    题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相 ...

  6. leetcode 213. House Robber II | 213. 打家劫舍 II(Java)

    题目 https://leetcode.com/problems/house-robber-ii/ 题解 这道题是「198. 打家劫舍」的进阶,和第 198 题的不同之处是,这道题中的房屋是首尾相连的 ...

  7. LeetCode—213. 打家劫舍 II

    213. 打家劫舍 II 题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相 ...

  8. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)

    递归和动态规划都是将原问题拆分成多个子问题然后求解,但是动态规划存储了子问题的解,不需要重复计算. 动态规划(Dynamic Programming,DP)需要转移方程和边界条件. 目录 一.70. ...

  9. [C++] LeetCode 213. 打家劫舍 II

    题目 注意事项: 这是 打家劫舍 的延伸. 在上次盗窃完一条街道之后,窃贼又转到了一个新的地方,这样他就不会引起太多注意.这一次,这个地方的所有房屋都围成一圈.这意味着第一个房子是最后一个是紧挨着的. ...

最新文章

  1. 计算节点宕机了怎么办?- 每天5分钟玩转 OpenStack(43)
  2. java中日期计算时间差,java中依据,两个日期,计算时间差
  3. 【ZOJ - 4029】Now Loading!!!(整除分块,思维,二分,前缀和)
  4. html 自定义标签 seo,wordpress深层seo优化:自定义栏目和tag标签页面title标题
  5. Linux系统安装配置curl
  6. Android Q 添加GMS包
  7. 美观!!大气!!! LVGL『Color picker颜色选择器控件』介绍
  8. 戴德金之连续性和无理数的中文翻译
  9. 网店三大要素:产品、运营与品牌
  10. 同位语从句 vs 定语从句 区别
  11. 查看笔记本电脑型号等数据
  12. day55 虚拟机 centos linux命令 搭建linux架构师必背命令
  13. unity 3d如何隐藏物体
  14. 【你好,windows】Windows 10 X64 19H2 18363.1556 终结版2021.5.16
  15. 网络、浏览器专题重点知识(含原理)
  16. python3 pyQt5之listWidget控件的高级运用--将多种控件组合插入其中一行
  17. error C3867:非标准语法;请使用“”来创建指向成员的指针
  18. 基于Unity3D的自动寻路车辆模拟
  19. mysql 数据库怎么收缩_SQL Server -- 数据收缩详解
  20. office-word使用技巧——样式自动多级列表

热门文章

  1. SQL查询数据库结构信息
  2. 量子计算与量子信息_量子计算会破坏安全性吗?
  3. 针织erp_编程源于我们长期的针织工作
  4. 微软批量许可 开放许可区别_网络漫画因开放许可而适用于动画
  5. unity捕捉全景图_DronePan:可捕捉飞机全景的应用程序
  6. (4)vue.js 基础语法
  7. Bootstrap3 模态对话框的选项
  8. Bootstrap Page header
  9. es6 实例:消除魔术字符串
  10. es6 Object.assign()方法