【动态规划算法练习】day4

news2025/1/10 10:15:39

文章目录

  • 一、213. 打家劫舍 II
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、740. 删除并获得点数
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、剑指 Offer II 091. 粉刷房子
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、213. 打家劫舍 II

1.题目简介

213. 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
在这里插入图片描述
在这里插入图片描述

2.解题思路

在这里插入图片描述

3.代码

class Solution {
public:
    int func(vector<int>& nums, int start, int end)
    {
        vector<int> v(2, 0);
        vector<vector<int>> dp(nums.size(), v);
        dp[start][0] = 0;//不偷第一家
        dp[start][1] = nums[start];//偷第一家
        for(int i = start + 1;i < end; ++i)
        {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
            dp[i][1] = dp[i - 1][0] + nums[i];
        }
        return max(dp[end - 1][0], dp[end - 1][1]);
    }
    int rob(vector<int>& nums) {
        if(nums.size() == 1) return nums[0];
        //分两种情况:1.不考虑偷最后一间房,但是考虑偷前一间房;2.考虑偷最后一间房,但是不考虑偷前一间房(两间房都不考虑偷的情况,隐藏在这两种情况中)
        return max(func(nums, 0, nums.size() - 1), func(nums, 1, nums.size()));
    }
};

4.运行结果

在这里插入图片描述

二、740. 删除并获得点数

1.题目简介

740. 删除并获得点数

给你一个整数数组nums,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
在这里插入图片描述

2.解题思路

在这里插入图片描述

3.代码

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        map<int, int> m;
        vector<int> v;
        for(auto& e : nums)
        {
            m[e]++;
        }
        for(auto& e : m)
        {
            v.push_back(e.first);
        }
        vector<int> vp(2, 0);
        vector<vector<int>> dp(v.size(), vp);
        //从0~i,不删除i点可以获得的最大点数;删除i点将获得的最大点数
        dp[0][0] = 0;//不删除该点可以获得的最大点数
        dp[0][1] = v[0] * m[v[0]];//删除该点将获得的最大点数
        for(int i = 1;i < v.size(); ++i)
        {
            if(v[i - 1] == v[i] - 1)
            {
                dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
                dp[i][1] = dp[i - 1][0] + v[i] * m[v[i]];
            }
            else//如果前一个值与当前值并不是相邻数,则删除当前数不会影响前一个数,因此要取删除或者不删除前一个值所能得到的较大点数
            {
                dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
                dp[i][1] = max(dp[i - 1][0], dp[i - 1][1]) + v[i] * m[v[i]];
            }
        }
        return max(dp[v.size() - 1][0], dp[v.size() - 1][1]);
    }
};

4.运行结果

在这里插入图片描述

三、剑指 Offer II 091. 粉刷房子

1.题目简介

剑指 Offer II 091. 粉刷房子
在这里插入图片描述

2.解题思路

在这里插入图片描述

3.代码

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        vector<int> v(3, 0);
        vector<vector<int>> dp(costs.size(), v);
        dp[0][0] = costs[0][0];//刷红色的最小花费
        dp[0][1] = costs[0][1];//刷蓝色的最小花费
        dp[0][2] = costs[0][2];//刷绿色的最小花费
        for(int i = 1;i < costs.size(); ++i)
        {
            dp[i][0] = min(dp[i - 1][1] , dp[i - 1][2]) + costs[i][0];//刷红色的最小花费
            dp[i][1] = min(dp[i - 1][0] , dp[i - 1][2]) + costs[i][1];//刷蓝色的最小花费
            dp[i][2] = min(dp[i - 1][0] , dp[i - 1][1]) + costs[i][2];//刷绿色的最小花费 
        }
        return min(min(dp[costs.size() - 1][0], dp[costs.size() - 1][1]), dp[costs.size() - 1][2]);
    }
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第4天。
宝剑锋从磨砺出,梅花香自苦寒来,继续加油!
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

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

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

相关文章

数字IC工程师的护城河是什么?

每个人都希望能够增加⾃⼰的核心竞争⼒&#xff0c;然后延展职业⽣涯。 可能IC研发工程师基本上都会有个40岁危机&#xff1f; 时代背景是最⼤的变数&#xff0c;它改变了⼈才供需和技术⾛向&#xff0c;⽐如做处理器 core曾经是屠⻰术&#xff0c;⽽现在是⻩⾦时代 处理器 cor…

堆和优先队列

文章目录 堆维护堆的性质建堆堆排序算法 优先队列详解cpp标准库 priority_queue 参考文献 堆 虽然“堆”这个词源自堆排序&#xff0c;但是目前它已经被引申为“垃圾存储机制”&#xff0c;例如在Java和Lisp语言中所定义的。强调一下&#xff0c;我们使用的堆不是垃圾收集存储…

设计模式之访问者模式笔记

设计模式之访问者模式笔记 说明Iterator(访问者)目录访问者模式示例类图抽象访问者角色类抽象元素角色类宠物猫类宠物狗类自己类其他人类家类测试类 说明 记录下学习设计模式-访问者模式的写法。JDK使用版本为1.8版本。 Iterator(访问者) 意图:表示一个作用于某对象结构中的…

平面设计师实习报告范文十篇

平面设计师实习报告范文1 经过了四年的系统性理论学习&#xff0c;使我对平面设计有了基本掌握&#xff0c;对于平面设计这个专业也有了一个系统的了解和掌握。我们即将离开大学校园&#xff0c;作为平面设计专业的毕业生&#xff0c;心中想得更多的是如何去做好一个平面设计师…

ETCD集群运维

ETCD集群运维 ETCD扩容节点ETCD参数调优时间参数快照磁盘网络 监控维护压缩历史版本消除碎片化存储配额快照备份 灾难恢复快照恢复 etcd gateway作用什么时候不应该使用网关启动方式 gRPC代理可扩展的watch API租约请求缓存启动gRPC代理 ETCD扩容节点 节点1&#xff1a;10.1.1…

管理类联考——逻辑——知识篇——论证推理——一、削弱——haimian

削弱 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量223262132 主要问法 以下哪项如果为真&#xff0c;则能最严重地削弱&#xff08;反驳&#xff09;上述结论?以下哪项如果为真&#xff0c;则最能削弱&#xff08;反驳&#xff09…

文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题

四、假设一个最大堆的所有元素都不相同&#xff0c;那么该堆的最小元素应该位于哪里? 文心一言&#xff1a; 最大堆的最小元素位于堆的根结点。由于最大堆的性质&#xff0c;根结点是堆中所有元素的最大值&#xff0c;因此它也是堆中所有元素的最小值。 讯飞星火&#xff1a…

工具及方法 - 如何进行任务管理

如何做好你该做的事&#xff0c;这是你的一生之敌。 没有一步到位的工具和一劳永逸的方法&#xff0c;只有不断变化的需求和自己用起来顺手的感觉。 对于GTD工具&#xff0c;在手机上安装过番茄工作法的工具&#xff0c;在电脑的Excel上也做过任务列表&#xff0c;在免费的项目…

解决 kali换源之后签名无效

报错问题&#xff1a; apt-get update 报错 更新扩展知识&#xff1a;kali更新源 终端输入 vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main …

计算机视觉中,有哪些基于控制点对的图像变换?

这里探讨的所有图像变换&#xff08;二维&#xff09;都是基于控制点对的&#xff0c;它们的主要区别在于&#xff1a; 1、它们是如何通过两张图像的控制点对产生变换场&#xff08;变换矩阵或者变换公式中的参数&#xff09;的 2、控制点之间的对应关系严格程度 这里说的变换…

远心镜头案例锦集

远心镜头&#xff08;Telecentric lens&#xff09; 定义&#xff1a;远心镜头是一类将其入瞳或出瞳放置于无穷远的光学系统。是为纠正传统镜头视差而设计&#xff0c;它可以在一定的物距范围内&#xff0c;使得到的图像放大倍率不会变化&#xff0c;即这种镜头拍出来的图像没…

人工智能(4):模型评估

模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何。 按照数据集的目标值不同&#xff0c;可以把模型评估分为分类模型评估和回归模型评估。 1 分类模型评估 准确率 预测正确的数占样本总数的比例。 其他评价指标…

嵌入式C开发 VS 嵌入式CPP开发!

目录 ​答主&#xff1a;听心跳的声音 答主&#xff1a;pansz 答主&#xff1a;candy 这是知乎嵌入式领域的一个热门话题&#xff0c;原文链接&#xff1a; https://www.zhihu.com/question/374663834 几个高赞回答&#xff1a; ​答主&#xff1a;听心跳的声音 单片机的主…

多项式回归的原理及实现、多重回归的原理

1.多项式回归的原理及实现 笔记来源于《白话机器学习的数学》 1.1 多项式回归的原理 预测一个变量 x x x与一个变量 y y y的关系 例如&#xff1a;广告费 x x x与点击量 y y y 用曲线拟合数据 求导过程类比本人之前的博客进行推导&#xff0c;相关笔记&#xff1a;最小二乘法的…

Nginx基于授权的访问控制步骤

目录 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录&#xff0c;添加认证配置置顶 四、 重启服务 五、 访问网址 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录&#xff0c;添加认证配置置顶 Vim /usr/loc…

【雕爷学编程】Arduino动手做(124)---24位WS2812环形灯板

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

tensorflow2模型保存和恢复

有两种方法可以保存模型&#xff1a; 使用检查点&#xff0c;一种简单的在硬盘上保存变量的方法使用SavedModel&#xff0c;模型结构及检查点 检查点不包含任何关于模型自身的描述&#xff1a;它们只是一种简单的存储参数并能让开发者正确恢复它的方法。 SavedModel格式在保…

Mysql复习多表查询

Mysql复习多表查询 1.多表关系2.多表查询概述3.内连接4. 外连接5. 自连接5.1 案例 6. 子查询6.1 标量子查询6.1.1 标量子查询案例 6.1 列子查询6.2 行子查询6.2.1 demo1 6.3 表子查询6.3.1 demo16.3.2 demo2 7.联合查询8.1 案例 附录 1.多表关系 >多表查询 项目开发中&…

【算法】代码随想录、数组——长度最小的子数组、滑动窗口实现

209.长度最小的子数组 解法思想来自代码随想录&#xff1a;209.长度最小的子数组 &#xff08;1&#xff09;暴力解法 我们暴力解法直接使用两个for循环&#xff0c;然后不断的遍历寻找符合条件的子序列&#xff1b; 初始化长度变量length和结果变量result为0和int类型最大数…

近期离职心情记录 大不了前端换行!

提了离职了&#xff0c;发消息给领导的时候我都不敢看&#xff0c;发了马上关闭了聊天框当乌龟。。。 一、大致背景介绍 现在在二线城市的上市公司&#xff0c;本人大专学历&#xff0c;学的是java&#xff08;甚至还报名了培训班&#xff09;。第一个公司是现在公司的外包公司…