当前位置: 首页 > news >正文

动态规划问题 -- 多状态模型(打家劫舍)

目录

  • 动态规划分析问题五步曲
  • 题目概述
  • 代码编写

动态规划分析问题五步曲

不清楚动态规划分析问题是哪关键的五步的少年们可以移步到
链接: 动态规划算法基础
这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的

题目概述

链接: 打家劫舍
在这里插入图片描述

  1. 状态表示(题目要求+自己的经验)
    本题状态:分析第i个位置,发现第i个位置可以选择偷和不偷
    显然,一个状态表示是不够的,得分类讨论
    teal[i] :表示第i个位置偷所获得的最大收益
    noteal[i] : 表示第i个位置不偷所获得的最大利益
  1. 状态转移方程推导
    对i位置进行分类讨论,若i位置偷,则i-1位置不偷 。若i位置不偷,则i-1位置可以偷也可以不偷。
    轻松得出状态转移方程
    在这里插入图片描述
  1. 初始化(防止越界+结合状态表示初始化)
    根据状态转移方程,当i = 0时会发生越界
    根据状态表示 :
    初始化令teal[0] = nums[0] 即可
  1. 填表顺序(分析要填i位置前一个依赖状态的位置)
    本题两个dp表显然都是从左到右填表
  1. 返回值(由题目要求来)
    因此我们并不确定最终位置偷的时候最大,还是不偷的时候最大
    所以返回 max(teal[n-1] 和 noteal[n-1]);

代码编写

有了动态规划五步曲我们就可以写出非常优雅的代码了

int rob(vector<int>& nums) {int n = nums.size();if(!nums.size()) return 0;vector<int> teal(n);vector<int> noteal(n);teal[0] = nums[0];for(int i = 1 ; i < n ; i++){teal[i] = noteal[i-1] + nums[i];noteal[i] = max(noteal[i-1],teal[i-1]);}return max(teal[n-1],noteal[n-1]);}

少年,今天你又进步了一点点哟,明天继续加油吧
在这里插入图片描述

http://www.xdnf.cn/news/435439.html

相关文章:

  • Java的进制转换
  • 大模型驱动的写实数字人实时对话:创新与实践
  • 谈谈各种IO模型
  • 算法·KMP
  • 1688 API 接口使用限制
  • 【C++】多线程和多进程
  • Java Spring 事件驱动机制
  • 中医诊所药房开处方调剂库存管理h5/pc开源版开发
  • 提供全球86国/地区进出口税费,46国/地区监管条件,53国/地区税费计算
  • 第二十三天打卡
  • 项目管理系统流程:高效运作的关键所在
  • 使用ADB命令操作Android的apk/aab包
  • [SAP] 通过程序名获取事务码TCode
  • Python实例题:Pvthon实现简单的Web服务器
  • AI 编程新时代!字节 Seed-Coder 重磅登场
  • 第六章QT基础: Lambda表达式补充
  • [250513] “End of 10” 活动:应对 Windows 10 支持终止,推广 Linux 转型
  • livenessProbe 和 readinessProbe 最佳实践
  • Pytorch学习笔记(二十二)Audio - Audio I/O
  • 论文《Collaboration-Aware Graph Convolutional Network for Recommender Systems》阅读
  • 打卡DAY24
  • 【调度算法】LaCAM快速多智能体路径搜索算法
  • LLM大模型transform架构的核心知识
  • 《从协议层面剖析 VoIP 通信:SIP 信令流中的 RPort、注册与呼叫建立机制》
  • 20250512期:基于arcpy数据驱动的大批量规范化出图
  • 油桃缺陷检测数据集VOC+YOLO格式559张2类别
  • AI助力:零基础开启编程之旅
  • 【JavaScript】原生 JavaScript 实现 localStorage 过期时间
  • Linux常用命令39——free显示系统内存使用量情况
  • 软件测试——面试八股文(入门篇)