简单多状态dp第二弹 leetcode -删除并获得点数 -粉刷房子

740. 删除并获得点数

删除并获得点数

分析:

使用动态规划解决

这道题依旧是 打家劫舍I 问题的变型。
我们注意到题目描述,选择 x 数字的时候, x - 1 与 x + 1 是不能被选择的。像不像 打家劫舍 问题中,选择 i 位置的金额之后,就不能选择 i - 1 位置以及 i + 1 位置的金额。因此,我们可以创建一个大小为 N(根据题目的数据范围)的 hash 数组,将 nums 数组中每一个元素 x ,累加到 hash 数组下标为 x 的位置处,然后在 hash 数组上来一次 打家劫舍 即可。

 代码:

class Solution {
public:int deleteAndEarn(vector<int>& nums) {int n=nums.size();const int N=1e4+10;int a[N]={0};for(auto num:nums){a[num]+=num;}vector<int>f(N+1);//选vector<int>g(N+1);//不选f[0]=a[0];for(int i=1;i<=N;i++){f[i]=g[i-1]+a[i-1];g[i]=max(g[i-1],f[i-1]);}return max(f[N],g[N]);}
};


LCR 091. 粉刷房子

粉刷房子

分析:

使用动态规划解决

状态表示:

这里我们选择比较常用的方式,以某个位置为结尾,结合题目要求。定义一个状态表示:但是我们这个题在 i 位置的时候,会面临「」「」「绿」三种抉择,所依赖的状态需要细

dp[i][0] 表示:粉刷到 i 位置的时候,最后一个位置粉刷上「红色」,此时的最小花
费;

dp[i][1] 表示:粉刷到 i 位置的时候,最后一个位置粉刷上「蓝色」,此时的最小花
费;
dp[i][2] 表示:粉刷到 i 位置的时候,最后一个位置粉刷上「绿色」,此时的最小花
费。

状态转移方程:

因为状态表示定义了三个,因此我们的状态转移方程也要分析三个:
对于 dp[i][0]
        如果第 i 个位置粉刷上「红色」,那么 i - 1 位置上可以是「蓝色或者绿色」。因此我们需要知道粉刷到 i - 1 位置上的时候,粉刷上「蓝色」或者「绿色」的最小花费,然后加上 i位置的花费即可。于是状态转移方程为: dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0] ;
同理,我们可以推导出另外两个状态转移方程为:
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1]
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2]

代码:

class Solution {
public:int minCost(vector<vector<int>>& costs) {int n=costs.size();vector<vector<int>>dp(n+1,vector<int>(5));for(int i=1;i<=n;i++){dp[i][0]=min(dp[i-1][1],dp[i-1][2])+costs[i-1][0];dp[i][1]=min(dp[i-1][0],dp[i-1][2])+costs[i-1][1];dp[i][2]=min(dp[i-1][1],dp[i-1][0])+costs[i-1][2];}return min({dp[n][1],dp[n][0],dp[n][2]});}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541470.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)

方法图解&#xff1a; class Solution { public:Node* copyRandomList(Node* head) {if ( !head ) {return nullptr;}Node *cur head;// 1. 在原节点的每个节点后创建一个节点while ( cur ) {Node *newNode new Node(cur -> val);newNode -> next cur -> next;cur …

大小端字节序 和 内存高低地址顺序

目录 1. 大小端字节序 1.1 什么是大小端字节序&#xff1f; 1.2 为什么有大小端字节序? 1.3 习题&#xff1a;用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…

g1:基于 Llama,用提示工程实现类似 o1 的深度推理

开源项目 g1 利用巧妙的提示策略&#xff0c;在 Groq 硬件上使用 Llama-3.1 70b 模型实现了类似 OpenAI o1 的推理链能力。g1 将推理过程可视化&#xff0c;并结合多种技巧引导 LLM 进行深度思考&#xff0c;显著提升了其在逻辑问题上的准确率&#xff0c;为 LLM 推理能力的提升…

Win10 安装Node.js 以及 Vue项目的创建

一、Node.js和Vue介绍 1. Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许你在服务器端运行 JavaScript&#xff0c;使得你能够使用 JavaScript 来编写后端代码。以下是 Node.js 的一些关键特点&#xff1a; 事件驱动和非阻塞 I/O&#xff1a;Node…

【24华为杯数模研赛赛题思路已出】国赛F题第二套思路丨附参考代码丨免费分享

2024年数模研赛E题解题思路 X 射线脉冲星光子到达时间建模思路分析 该题目是天文学背景的数学建模题目&#xff0c;其涉及到物理学中关于光线传播过程受多种因素的共同干扰的复合模型&#xff0c;以及天体和卫星的坐标变换和运动模型&#xff0c;首先我们要&#xff0c;建立卫…

JavaScript使用leaflet库显示信息窗口

前言 我们可千万不能忘记我们之前花的流程图哦&#xff0c;我们所有的计划都按照我们的流程图来去构建&#xff1b; 我们已经完成了&#xff0c;页面的加载&#xff0c;也已经完成获取用户当前的位置坐标&#xff0c;并且我们通过地图的API将当前的位置在地图中渲染出来&…

基于协同过滤推荐算法的影视推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

缓存数据和数据库数据一致性问题

根据以上的流程没有问题&#xff0c;但是当数据变更的时候&#xff0c;如何把缓存变到最新&#xff0c;使我们下面要讨论的问题 1. 更新数据库再更新缓存 场景&#xff1a;数据库更新成功&#xff0c;但缓存更新失败。 问题&#xff1a; 当缓存失效或过期时&#xff0c;读取…

【C++】C++库:如何链接外部库、静态链接和动态链接,以及如何自建库并使用

十三、C库&#xff1a;如何链接外部库、静态链接和动态链接&#xff0c;以及如何自建库并使用 本篇讲C库&#xff0c;先讲如何在项目中使用外部库&#xff0c;包括静态链接和动态链接的实现&#xff1b;再讲如何在VisualStudio中自建模块或库项目&#xff0c;让所有项目都能使…

Java-数据结构-排序-(一) (。・ω・。)

文本目录&#xff1a; ❄️一、排序的概念及引用&#xff1a; ➷ 排序的概念&#xff1a; ➷ 常见的排序算法&#xff1a; ❄️二、插入排序的实现&#xff1a; ➷ 1、直接插入排序&#xff1a; ☞ 直接插入排序的基本思想&#xff1a; ☞ 直接插入排序的实现&#xff1a; ▶…

OBB-最小外接矩形包围框-原理-代码实现

前言 定义&#xff1a;OBB是相对于物体方向对齐的包围盒&#xff0c;不再局限于坐标轴对齐&#xff0c;因此包围点云时更加紧密。优点&#xff1a;能够更好地贴合物体形状&#xff0c;减少空白区域。缺点&#xff1a;计算较为复杂&#xff0c;需要计算物体的主方向&#xff0c…

linux 操作系统下dhcpd命令介绍和案例应用

linux 操作系统下dhcpd命令介绍和案例应用 DHCP&#xff08;动态主机配置协议&#xff09;在Linux操作系统中用于自动为网络中的设备分配IP地址和其他网络配置 DHCP的基本概念 DHCP协议通过UDP工作&#xff0c;主要有两个用途&#xff1a; 自动分配IP地址给网络中的设备。提…

Sn=a+aa+aaa+aaaa+aaaaa的前五项之和,其中a是一个数字

//计算求和 //Snaaaaaaaaaaaaaaa的前五项之和&#xff0c;其中a是一个数字 //如&#xff1a;222222222222222 #include<stdio.h> #include<math.h> #define A 2 //数字a #define B 5 //前几项的和 int main() {int n 0;int sum 0;int i 0;for (i 0; i <B;…

STM32F407单片机编程入门(十一) ESP8266 WIFI模块实战含源码

文章目录 一.概要二.ESP8266 WIFI模块主要性能参数三.ESP8266 WIFI模块芯片内部框图四.ESP8266 WIFI模块原理图五.ESP8266 WIFI模块与单片机通讯方法1.硬件连接2.ESP8266模块AT指令介绍 六.STM32单片机与ESP8266WIFI模块通讯实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 …

变电站绝缘套管红外检测数据集

包含以下4个数据文件&#xff1a; /train&#xff1a;训练集 /valid&#xff1a;验证集 /test&#xff1a;测试集 README.txt&#xff1a;数据说明 【数据说明】检测目标以Pascal VOC格式进行标注&#xff0c;对每个图像进行以下预处理&#xff0c;统一调整大小为640x640。数据…

死机检测电路

目录&#xff1a; 1、死机检测概述 2、活机状态 3、死机状态 1、死机检测概述 本内容分享一个“死机检测电路”&#xff0c;用作单片机&#xff08;MCU&#xff09;死机时&#xff0c;不至于持续给负载供电。‌持续负载供电&#xff0c;比如加热丝&#xff0c;可能会引发严…

在腾讯云申请https(我得是腾讯云服务器),通过宝塔设置https

参考 一键 HTTPS&#xff1a;https://cloud.tencent.com/document/product/400/58062 DNS 验证&#xff1a;https://cloud.tencent.com/document/product/400/54500?from_cn_redirect1 申请免费的证书 访问连接&#xff1a;https://console.cloud.tencent.com/ssl 点击页…

hive分区详细教程

为什么要分区&#xff1f; 为了提高sql的查询效率 比如&#xff1a; select * from orders where create_date20230826; 假如数据量比较大&#xff0c;这个sql就是全表扫描&#xff0c;速度肯定慢。 可以将数据按照天进行分区&#xff0c;一个分区就是一个文件夹&#xff0c;当…

软件设计师——操作系统

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;软考——软件设计师&#x1f3c5;往期回顾&#x1f3c6;&#xff1a;C: 类和对象&#xff08;上&#xff09;&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱 一、操作系统…

伊犁云计算22-1 linux 逻辑卷管理

&#xff11;  三块硬盘  &#xff53;&#xff41;&#xff54;&#xff41;  先做组&#xff0c;再做逻辑 第一步添加三块硬盘&#xff0c;然后分区&#xff0c;装文件系统 这个过程参考之前的文章不说 新增了三块 &#xff53;&#xff44;&#xff42; &#xff…