C++ 多状态dp

目录

按摩师

打家劫舍

打家劫舍2

删除并获得点数

粉刷房子


按摩师

面试题 17.16. 按摩师

最大值问题

f : 预约此次的最长时间    g :不预约此次的最长时间

出现的错误:return max(f[n - 1]), g[n - 1]);  

注意:①题目没给nums的范围,if(n == 0) return 0;没有判0,就会报错

 ②奇怪的是不是在执行的时候报错,而是在运行样例的时候报这个错误

参考代码

class Solution {
public:int massage(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);if(n == 0) return 0;f[0] = nums[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = max(f[i - 1], g[i - 1]);}return max(f[n - 1], g[n - 1]);//return max(f[n - 1]), g[n - 1]);}
};

打家劫舍

198. 打家劫舍

参考代码

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);f[0] = nums[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = max(f[i - 1], g[i - 1]);}return max(f[n - 1], g[n - 1]);}
};

打家劫舍2

213. 打家劫舍 II

最大值问题

f : 取当前位置的值,且是当前位置为结尾的最大值

g:不取当前位置的值,且是当前位置为结尾的最大值

注意点:①传到函数参数的问题,这里的有效区间是[left, right]

②按照nums[0] 去与不取划分,因为nums.size() >= 1,按照nums[2]划分这么写会出现下标越界

参考代码

class Solution {
public:int rob(vector<int>& nums) {return max(nums[0] + _rob(nums, 2, nums.size() - 2), _rob(nums, 1, nums.size() - 1));}int _rob(vector<int>& nums, int left, int right){if(left > right) return 0;int n = nums.size();vector<int> f(n), g(n);// vector<int> f[n], g[n];f[left] = nums[left];for(int i = left + 1; i <= right; i++){f[i] = g[i - 1] + nums[i];g[i] = max(g[i - 1], f[i - 1]);}return max(f[right], g[right]);// return max(f[i], g[i]);}
};

删除并获得点数

740. 删除并获得点数

注释掉的也对,没发现写成arr[i - 1],10000取不上,然后改成10002

参考代码1

class Solution {
public:int deleteAndEarn(vector<int>& nums) {// vector<int> f(10002), g(10002), arr(10002);// for(auto e : nums)//     arr[e] += e;// for(int i = 1; i <= 10001; i++)// {//     f[i] = g[i - 1] + arr[i - 1];//     g[i] = max(g[i - 1], f[i - 1]);// }// return max(f[10001], g[10001]);vector<int> f(10001), g(10001), arr(10001);for(auto e : nums)arr[e] += e;f[0] = arr[0];for(int i = 1; i < 10001; i++){f[i] = g[i - 1] + arr[i];g[i] = max(g[i - 1], f[i - 1]);}return max(f[10000], g[10000]);}
};

注意:①这个地方是arr[i] , 不是nums[i]

☆☆②变量名和函数名一样

vs下可以看出,这里的max是一个变量不是函数 ,对于下面的报错的理解:这不是一个函数,不能有()

明显调用的表达式前的括号必须具有(指针)函数类型 

也不是不能改:

力扣下:报错也是很明显了    被调用的对象不是函数或者函数指针

参考代码2

class Solution {
public:int deleteAndEarn(vector<int>& nums) {int n = nums.size();int m = 0;for(auto e : nums)m = max(e, m);vector<int> f(m + 1), g(m + 1), arr(m + 1);for(auto e : nums)arr[e] += e;f[0] = arr[0];//可以不写,因为最小是1;for(int i = 1; i < m + 1; i++){f[i] = g[i - 1] + arr[i];//g[i] = max(f[i - 1], g[i - 1]);}return max(g[m], f[m]);}
};

粉刷房子

LCR 091. 粉刷房子

我写的都是没有扩容,一维dp初始化的并不多,且不用偏移量

错误 ①return min(red[n - 1], max(blue[n - 1], green[n - 1]));

参考代码

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 云开发笔记

uniapp云开发官方文档https://uniapp.dcloud.io/uniCloud/learning.html 新建 关联云空间 云函数获取用户openID uniCloud API列表https://uniapp.dcloud.io/uniCloud/cf-functions.html#unicloud-api%E5%88%97%E8%A1%A8 自建云函数login event中包含前端传来的参数 uniCloud.…

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板&#xff0c;以及设备树&#xff0c;驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&#xff0c;点击“linux”&#xff0c;点击“atk-mp1”&am…

使用阿里云服务器搭建网站教程,就这么简单!

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云百科aliyunbaike.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&a…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题&#xff1a;OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接&#xff1a;https://arxiv.org/abs/2402.07456 项目主页&a…

软件报错提示缺少D3DCompiler_47.dll文件怎么解决

许多用户在运行游戏或电脑软件时&#xff0c;遇到了一个提示“找不到d3dcompiler_47.dll”的错误消息。这个问题相当普遍&#xff0c;这个错误通常是由于系统中缺少关键的d3dcompiler_47.dll文件所导致的&#xff0c;而这个文件是很多应用程序运行的必要条件&#xff0c;特别是…

ES分页查询的最佳实践:三种方案

Elasticsearch&#xff08;ES&#xff09;中进行分页查询时&#xff0c;最佳实践取决于具体的使用场景和需求。 以下是对每种分页方法的简要分析以及它们适用的情况&#xff1a; 1. From Size 最常见且直观的方法&#xff0c;通过from参数指定跳过多少条记录&#xff0c;si…

【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除

文章目录 MySQL表的增删查改1. Create&#xff08;创建&#xff09;1.1 单行插入1.2 多行插入1.3 替换 2. Retrieve&#xff08;读取&#xff09;2.1 select查看2.2 where条件2.3 结果排序2.4 筛选分页结果 3. Update&#xff08;更新&#xff09;3.1 更新单个数据3.2 更新多个…

【Python】time模块

专栏文章索引&#xff1a;Python 目录 一、介绍​编辑 二、常用函数​编辑 一、介绍 Python 的 time 模块提供了处理时间的函数。 二、常用函数 1.time()&#xff1a;返回当前时间的时间戳&#xff08;从1970年1月1日开始计时的秒数&#xff09;。 import timecurrent_ti…

【Python数据结构与判断1/7】复杂的多向选择

目录 导入 举个栗子 代码优化 elif 栗子 执行顺序 情况一 情况二 情况三 if-elif-else特性 三种判断语句小结 if if-else if-elif-else 嵌套语句 if嵌套 栗子 执行顺序 相互嵌套 Tips Debug 总结 导入 在前面&#xff0c;我们学习了单向选择的if语句和多项…

人才推荐 | 高级半导体工艺工程师,美国凯斯西储大学电化学博士

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

《深度学习风暴:掀起智能革命的浪潮》

在当今信息时代,深度学习已经成为科技领域的一股强大力量,其应用领域涵盖了从医疗到金融再到智能交互等方方面面。随着技术的不断进步和应用的不断拓展,深度学习的发展势头愈发迅猛,掀起了一股智能革命的浪潮。本文将从基本原理、应用实例、挑战与未来发展方向、与机器学习…

1923 基于单片机自动升旗、国旗控制系统设计(仿真、程序、电路图)

摘要 本文详细介绍了一款基于STC89C52单片机的国旗升降系统&#xff0c;其设计实现了按键控制国旗的匀速升降&#xff0c;同时考虑了误动作避免、半旗状态的判定、时间控制等方面的问题。文档还涵盖了STC89C52单片机的特性、硬件设计、程序控制&#xff0c;以及使用Proteus和A…