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

C++每日一练:打家劫室(详解动态规划法)

文章目录

  • 前言
  • 一、题目
  • 二、分析
  • 三、代码
  • 总结


前言

这题目出得很有意思哈,打劫也是很有技术含量滴!不会点算法打劫这么粗暴的工作都干不好。
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目名称:
打家劫舍

题目描述:
一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

输入描述:
输入一个正整数n代表房屋的数量(n≤100),接着输入n个非负整数代表每间房屋的现金数量

输出描述:
小偷能偷取的最大金额。

示例1
输入
4
1 2 3 1

输出
4

二、分析

我们假设只有三个房间,事情就很简单了。做为专业小偷,我们知道,房屋编号是从0开始的,只能偷1号房屋或0号+2号房屋。为了取得最大战果,我们分别去看了看每个房屋能偷到多少。出门比较一下,就知道结果了。
我们逛完了三个房屋,现在站在第2号房屋门口来思考一下,就是选择0和2,或选1的问题。
我们把0+2能偷到的钱先记在2号房屋门上,把1号能偷到的钱记在1号门上,然后去看看3号房屋有多少钱可偷。这样1、2、3号房屋又成了一个同样的选择…
我们不停的在门上记录能偷到的钱,不停的用同样的方法选择。
拿示例来说,我们在1号房屋门上记上2毛,2号房屋门上记上4毛(0号加2号),然后和3号房屋来比较,显然4毛大于1号的2毛加3号的1毛。侦察完成,就偷0号加2号了!
再找个长点的例子:
1 2 3 2 9 1 2
同样先在1号房屋门上记上2毛,2号房屋门上记4毛(0号+2号),侦察完3号房屋后,就成了:
2 4 2 9 1 2
继续侦察下一家:
4 4 9 1 2
4 (13) 1 2
(13) 5 2
5 (15)
(15)
最后偷得15毛!

三、代码

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>using namespace std;int solution(int n, std::vector<int>& vec){int result=0;// TODO:vector<int> tmp={vec[0], max(vec[0], vec[1])};if(n==1) return tmp[0];if(n==2) return tmp[1];for (int i=2; i<n; ++i){tmp[i] = max(tmp[i-1], tmp[i-2]+vec[i]);}result = tmp[n-1];return result;
}int main() {int n;std::vector<int> vec;std::cin>>n;std::string line_0, token_0;getline(std::cin >> std::ws,line_0);std::stringstream tokens_0(line_0);while(std::getline(tokens_0, token_0, ' ')){vec.push_back(std::stoi(token_0));}int result = solution(n,vec);std::cout<<result<<std::endl;return 0;

max(vec[0], vec[1])这一句解决了前二个房屋的选择,因为第二个房屋我们必须选前两个中最大的。如果0号是最大的,就把1号变成0号一样,再来继续选择。
举例来看:
7 1 1 2
侦察前二个房屋后就是:
7 7 1 2
然后7 8 2
最后9
如果是这样的:
1 7 2 1
侦察前二个后就还是:
1 7 2 1
所以初始化的时候一定要考虑清楚!

总结

所谓动态规划:就是将问题划分为一系列子问题,求各子问题的最优解,然后以自底向上的方式递归地从子问题的最优解构造出整个问题的最优解。
在本例中,我们把n个房屋不停的当作三个房屋来处理。所以我们设计了一个tmp数组来存储过程数据。
动态规划和分治法有点像,都是把复杂问题分解成简单的小问题。
不过动态规划的子问题之间不是独立的,子问题的解往往会在下一个选择中被使用。
而分治法,一般会把一个复杂的问题分解成若干个独立的子问题,求解子问题后再合成本问题的解。今天的 “小艺照镜子” (本专栏的另一篇文章有详解)就是用分治法解的。

相关文章:

C++每日一练:打家劫室(详解动态规划法)

文章目录 前言一、题目二、分析三、代码总结 前言 这题目出得很有意思哈&#xff0c;打劫也是很有技术含量滴&#xff01;不会点算法打劫这么粗暴的工作都干不好。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 题目名称&#xff1a; 打家…...

Wireshark使用

Capture Filters 语法 <Protocol name><Direction><Hosts><Value><Logical operations><Expressions> e.g 1.tcp src port 443 只抓取来源端口是443的tcp数据 2.not arp 不获取arp数据 3.port 80 获取端口是80的数据&#xff0c;不指…...

这才是 SpringBoot 统一登录鉴权、异常处理、数据格式 的正确姿势

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer 异常处理使用注解 RestControllerAdvice ExceptionHandler 数据格式返回使用注解 ControllerAdvice 并且实现接口 Response…...

Java面试题总结 | Java面试题总结6-MYSQL模块(持续更新)

Mysql 文章目录 Mysql关系型数据库和非关系型数据库的区别什么是ORM?-**mybatis**如何评估一个索引创建的是否合理&#xff1f;Count函数执行效果上&#xff1a;执行效率上&#xff1a;count(主键)和count(列名) 数据库的三大范式Mysql中char和varchar的区别数据库设计或者功能…...

Linux命令集(Linux文件管理命令--mv指令篇)

Linux命令集&#xff08;Linux文件管理命令--mv指令篇&#xff09; Linux文件管理命令集&#xff08;mv指令篇&#xff09;2. mv(move)1. 文件移动2. 递归移动目录3. 文件目录重命名4. 强制移动5. 备份覆盖的目标文件6. 试探性移动7. 显示移动进度8. 补集操作9. 修改文件的权限…...

不一样的 Git 之间 | GitLab vs GitHub vs Gitee vs GitCode

Git仓库对比&#xff1a;GitLab vs GitHub vs Gitee vs GitCode 在软件开发中&#xff0c;版本控制是必不可少的工具之一。Git作为目前最为流行的版本控制系统&#xff0c;也逐渐成为了开发者们的标配。但是&#xff0c;如何选择一个合适的Git仓库来存储您的代码呢&#xff1f;…...

海尔牵头IEEE P2786国际标准通过Sponsor投票并连任工作组主席

01 海尔牵头IEEE P2786国际标准 通过Sponsor投票 并连任工作组主席 海尔牵头制定的全球首个服装物联网国际标准IEEE P2786《Standard for General Requirements and Interoperability for Internet of Clothing》通过Sponsor投票&#xff0c;标志着该国际标准草案得到了行业…...

倾斜摄影超大场景的三维模型的顶层合并的纹理压缩与抽稀处理技术分析

倾斜摄影超大场景的三维模型的顶层合并的纹理压缩与抽稀处理技术分析 倾斜摄影超大场景的三维模型的顶层合并需要对纹理进行压缩和抽稀处理&#xff0c;以减小数据量和提高数据的传输和展示性能。以下是一种常用的纹理压缩和抽稀处理技术&#xff1a; 1、纹理图集 纹理瓦片化…...

linux命令之iostat详解

iostat 监视系统输入输出设备和CPU的使用情况 推荐Linux命令在线工具&#xff1a;linux在线查询工具 补充说明 iostat命令 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。同vmstat一样&#xff0c;ios…...

【C++】程序员必备知识:认识类与对象

【C】程序员必备知识&#xff1a;认识类与对象 ①.面向过程和面向对象②.类的引入③.类的定义Ⅰ.定义方式Ⅱ.命名规则建议&#xff1a; ④.类的访问限定符及封装Ⅰ.访问限定符Ⅱ.封装 ⑤.类的作用域⑥.类的实例化⑦.类的对象大小计算Ⅰ.如何计算&#xff1f;Ⅱ.类对象存储方式Ⅲ…...

python基础实战5-python基本结构

1 if语句 if语句是用来进行判断的&#xff0c;其使用格式如下 if 要判断的条件&#xff1a; 条件成立时&#xff0c;要做的事情 案例一&#xff1a; age 30 print("------if判断开始------") if age > 18:print("我成年了") print("------if判断…...

移动端异构运算技术 - GPU OpenCL 编程(基础篇)

一、前言 随着移动端芯片性能的不断提升&#xff0c;在移动端上实时进行计算机图形学、深度学习模型推理等计算密集型任务不再是一个奢望。在移动端设备上&#xff0c;GPU 凭借其优秀的浮点运算性能&#xff0c;以及良好的 API 兼容性&#xff0c;成为移动端异构计算中非常重要…...

QString类方法和变量简介(全)

QString类方法和变量简介 操作字符串(|append|insert|sprintf|QString::arg()|prepend|replace|trimmed|simplified)查询字符串(startsWith|endsWith|contains|localeAwareCompare|compare)字符串转换 标准C提供了两种字符串&#xff1a;一种是C语言风格的以"\0"字符…...

中移链控制台对接4A平台功能验证介绍

中移链控制台具备单独的注册登录页面&#xff0c;用户可通过页面注册或者用户管理功能模块进行添加用户&#xff0c;通过个人中心功能模块进行用户信息的修改和密码修改等操作&#xff0c;因业务要求&#xff0c;需要对中移链控制台的用户账号进行集中管理&#xff0c;统一由 4…...

必知的Facebook广告兴趣定位技巧,更准确地找到目标受众

在Facebook广告投放中&#xff0c;兴趣定位是非常重要的一环。兴趣定位不仅可以帮助我们找到我们想要的目标受众&#xff0c;还可以帮助我们避免一些常见的坑。今天&#xff0c;就让我们一起来看看必知的Facebook广告兴趣定位技巧&#xff0c;更准确地找到目标受众。 1.不要只关…...

【MySQL】慢查询+SQL语句优化 (内容源自ChatGPT)

慢查询SQL语句优化 1.什么是慢查询2.优化慢查询3.插入数据优化5.插入数据底层是什么6.页分裂7.页合并8.主键优化方式10.count 优化11.order by优化12.group by 优化13.limit优化14.update 优化15.innodb 三大特征 1.什么是慢查询 慢查询是指执行SQL查询语句所需要的时间较长&a…...

HashMap底层源码解析及红黑树分析

HashMap线程不安全&#xff0c;底层数组链表红黑树 面试重点是put方法&#xff0c;扩容 总结 put方法 HashMap的put方法&#xff0c;首先通过key去生成一个hash值&#xff0c;第一次进来是null&#xff0c;此时初始化大小为16&#xff0c;i (n - 1) & hash计算下标值&a…...

科技云报道:一路狂飙的ChatGPT,是时候被监管了

科技云报道原创。 即使你过去从不关注科技领域&#xff0c;但近期也会被一个由OpenAI&#xff08;美国的一家人工智能公司&#xff09;开发的人工智能聊天机器人“ChatGPT”刷屏。 与上届“全球网红”元宇宙不同&#xff0c;这位新晋的“全能网友”似乎来势更加凶猛。 互联网…...

第四十四章 管理镜像 - 传入日记传输率

文章目录 第四十四章 管理镜像 - 传入日记传输率传入日记传输率镜像数据库状态 第四十四章 管理镜像 - 传入日记传输率 传入日记传输率 在备份和异步成员的镜像成员状态列表下方&#xff0c;自上次刷新镜像监视器以来日志数据从主服务器到达的速率显示在该成员的传入日志传输…...

加密解密学习笔记

加密种类 对称加密&#xff0c;分组对称加密算法 加密算法 AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准 DES&#xff08;Data Encryption Standard&#xff09;数据加密标准 3DES/Triple DEA (Triple Data Encryption Algorithm) 三重数据加密算…...

FanControl 267版:Windows电脑风扇噪音终极解决方案

FanControl 267版&#xff1a;Windows电脑风扇噪音终极解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

顶伯知识竞赛系统 · 核心功能列表

&#x1f680; 顶伯知识竞赛系统 核心功能列表专业 高效 让知识竞赛组织更简单&#x1f3af; 核心优势速览⏱️ 高效&#xff1a;传统方式2-3天的准备工作&#xff0c;2-3小时完成&#x1f3af; 精准&#xff1a;系统自动计分、自动判定抢答&#xff0c;零误差&#x1f3a8;…...

面试题详解:提示词工程 Prompt Engineering 全攻略——大模型提示词、RAG Prompt、Agent Prompt、Tool Calling、结构化输出与安全防护一次讲透

1. 什么是提示词工程&#xff1f;1.1 提示词不是“咒语”&#xff0c;而是模型的工作说明书提示词工程&#xff0c;通俗地说&#xff0c;就是把你想让大模型完成的任务&#xff0c;用模型更容易理解、更容易执行、更容易稳定复现的方式写出来。它不是玄学&#xff0c;也不是简单…...

MultiFunPlayer终极指南:5分钟掌握开源设备同步软件,打造沉浸式娱乐体验

MultiFunPlayer终极指南&#xff1a;5分钟掌握开源设备同步软件&#xff0c;打造沉浸式娱乐体验 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer …...

实测Taotoken多模型聚合调用的响应延迟与稳定性观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken多模型聚合调用的响应延迟与稳定性观感 在项目开发中&#xff0c;我们常常需要接入不同的大模型来满足多样化的需求。…...

XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极解决方案

XUnity Auto Translator&#xff1a;3分钟为Unity游戏添加多语言支持的终极解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍而放弃心爱的Unity游戏&#xff1f;或者作为开发者…...

AI工作流编排框架aiflows:构建模块化、可维护的多智能体系统

1. 项目概述&#xff1a;当AI工作流成为团队协作的“操作系统”如果你和我一样&#xff0c;在过去几年里尝试过将多个大语言模型&#xff08;LLM&#xff09;串联起来&#xff0c;构建一个能处理复杂任务的智能体&#xff08;Agent&#xff09;或工作流&#xff0c;那你一定经历…...

ChatGPT与Notion深度整合实战手册(企业级私有化部署版):支持API密钥分级管控、审计日志追踪、GDPR合规配置

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ChatGPT与Notion深度整合概述 ChatGPT 与 Notion 的深度整合正重塑个人知识管理与团队协作的工作流范式。二者分别代表当前最强大的语言理解能力与最灵活的结构化信息组织平台&#xff0c;其结合并非简单 API…...

APK安装器:在Windows系统上高效安装安卓应用的实用工具

APK安装器&#xff1a;在Windows系统上高效安装安卓应用的实用工具 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在移动应用生态日益丰富的今天&#xff0c;用户经常…...

蓝桥杯备赛别死磕理论!用DFS实战迷宫、八皇后,5分钟搞懂回溯模板

蓝桥杯算法实战&#xff1a;用DFS破解迷宫与八皇后问题的5个黄金法则 在算法竞赛的战场上&#xff0c;深度优先搜索&#xff08;DFS&#xff09;就像一把瑞士军刀——看似简单却能在关键时刻解决各类难题。许多选手在备战蓝桥杯时陷入理论泥潭&#xff0c;反复背诵模板却难以应…...