「动态规划」删除并获得点数

力扣原题链接,点击跳转。

给你一个整数数组nums。每次操作,可以删除任意一个值n,接着获得点数n,并同时删除所有的n-1和n+1。你最多能获取多少点数?

这个问题的解法相当巧妙。我们可以把问题先转化一下。用类似计数排序的思路,定义一个数组arr,用arr[i]表示所有的点数i的和。比如nums数组:1、2、2、3、3、3,那么arr数组:0、1、4、9,因为1出现1次,和为1;2出现2次,和为2×2=4;3出现3次,和为3×3=9。

盯着这个arr数组,问题就转化为:在arr数组中选取一个子数组,不能同时选取相邻的元素,请找出一个子数组,让这个子数组所有元素的和最大。如果你看到这里,觉得这道题跟某一道经典问题很像,有这种感觉就对了。具体请看我的另一篇博客:「动态规划」打家劫舍,点击跳转。有了打家劫舍的铺垫,这个问题就非常简单了,思路可以说是一模一样。

用动态规划的思路来解决这个问题。首先确定状态表示,用f[i]表示选到下标为i的元素时,必须选择下标为i的元素,子数组的最大和;用g[i]表示选到下标为i的元素时,不能选择下标为i的元素,子数组的最大和。接着推导状态转移方程,显然f[i]=g[i-1]+arr[i],g[i]=max(f[i-1],g[i-1])。初始化f[0]=arr[0]=0,g[0]=0。为什么arr[0]=0呢?因为点数0不管选多少,和都是0。填表时应从左往右同时填表。arr有n个元素,最后返回max(f[n-1],g[n-1])。

class Solution
{
public:int deleteAndEarn(vector<int>& nums){const int N = 10001;// 用arr[i]表示所有点数i的和vector<int> arr(N);for (auto num : nums)arr[num] += num;// 创建dp表vector<int> f(N);auto g = f;// 填表for (int i = 1; i < N; i++){f[i] = g[i - 1] + arr[i];g[i] = max(f[i - 1], g[i - 1]);}return max(f[N - 1], g[N - 1]);}
};

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

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

相关文章

浅谈,Java当中普通类与抽象类的区别

前言 这篇博客没有什么特别有技术含量的地方,只是对于JavaSE 基础语法的一个小总结,基本功还是很重要的,因此笔者想写下来而已 普通类 什么是普通类? 普通类是可以直接实例化的类&#xff0c;包含具体的实现和属性。它是Java中最常见的类类型&#xff0c;用于创建对象和实现…

【Python性能优化】取最值的差异

取最值的差异 测试Windows 测试结果Linux 测试结果 测试 测试内容&#xff1a;从一组 x, y, z 坐标值中获得每个维度&#xff08;x、y、z&#xff09;的值域范围。此处不考虑将数据临时存放到内存&#xff0c;再整组获取值域的操作&#xff08;因为对单文件这么做问题不大&…

PS系统教学01

在前面几节内容基本介绍了PS的基本作用&#xff0c;简单的对PS中的某些基础功能进行介绍应用。 接下来我们进行系统的分享。 本次分享内容 基础的视图操作 接下来我们是对于PS工作区域的每个图标工具进行详细的分享 抓手工具缩放工具 这个图标是将工具栏由一列变成两列 一…

004 String

文章目录 String设计为不可变原因安全性缓存哈希值字符串池化不可变对象的天然线程安全提高代码可读性 private finalString a new String("ccc");和String b "ddd"使用new关键字创建字符串使用字符串字面量创建字符串 去掉final内部状态的不一致性多线程…

SpringBoot——整合SLF4j进行日志记录

目录 日志 项目总结 新建一个SpringBoot项目 pom.xml application.properties项目配置文件 logger.xml日志配置文件 TestController控制器 SpringbootSlf4jApplication启动类 启动项目 生成logger.log日志文件 日志 在开发中&#xff0c;我们经常使用 System.out.prin…

物联网六大核心技术——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网六大核心技术&#xff0c;是构建万物互联的基础&#xff0c;它们相互协作&#xff0c;共同实现物联网的广泛应用和深远影响。这六大技术分别是感知技术、网络通信技术、智能识别技术、计算技术、平台技术和安全技术&#xff0c;它们…

aws lakeformation注册s3位置的原因

参考资料 lakeformation底层数据的访问逻辑 向lakeformation注册s3位置的目的是让lakeformation控制对AWS S3 位置底层数据的访问&#xff08;以下简称LF&#xff09; 注册s3位置后可以进行两种授权 数据访问授权&#xff08;SELECT、INSERT 和 DELETE&#xff09; 数据位置…

不含一阶导数项的线性二阶微分方程的通解

假设这里有一个线性二阶微分等式&#xff0c;形式如下&#xff1a; &#xff08;1&#xff09; 其中是连续的&#xff0c;是在实闭区间是连续的,如果有人倾向于推广&#xff0c;在相对假弱的假设下&#xff0c;这个结果能够被发现。如果是下列其次线性方程的任意两个线性无关的…

小度推出全球首款基于文心大模型的学习机Z30,仅售价6699元

5月27日&#xff0c;小度科技召开新品发布会&#xff0c;全球首款基于文心大模型的学习机——小度学习机Z30重磅发布。 据「TMT星球」了解&#xff0c;该产品基于文心大模型&#xff0c;重新定义了“AI老师”的能力边界&#xff0c;不仅是一款能为孩子提供全面、有效学习辅导的…

报修新选择:一款软件搞定所有维修问题

数字化、智能化时代发展迅速&#xff0c;各类便捷、智能化软件应用已经深入到我们生活和工作的方方面面。尤其是在企业或学校的设备管理中&#xff0c;报修维修工作一直是一个重要环节。传统的报修方式&#xff0c;如电话报修、填写纸质报修单等&#xff0c;已经无法满足现代高…

Superset二次开发之柱状图自定义初始化时Data Zoom数据缩放值

Superset项目柱状图来自Echarts 首先Echarts实现柱状图数据缩放初始化默认值的效果 核心代码 设置Datazoom 的start 和end myChart.showLoading(); $.get(ROOT_PATH /data/asset/data/obama_budget_proposal_2012.list.json,function (obama_budget_2012) {myChart.hideLoa…

Python 文件操作指南:使用 open 和 with open 实现高效读写

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本系列文章主要分享文件操作&#xff0c;了解如何使用 Python 进行文件的读写操作&#xff0c;介绍常见文件格式的读取和写入方法&#xff0c;包括TXT、 CS…

aws lakeformation工作流程和权限管理逻辑

lakeformation在IAM权限模型之外提供独立的更细粒度的权限&#xff0c;控制数据湖数据的访问 能够提供列、行和单元格级别的精细控制 lakeformation的目的是要取代s3和iam策略&#xff0c;主要功能为 数据摄入&#xff0c;LF可以将不同类型的数据统一管理安全管理&#xff0…

SRAM和Flash的区别

什么是SRAM SRAM的特点 什么是Flash Flash存储器的特点 SRAM和Flash的区别 什么是SRAM SRAM&#xff1a;全称为Static Random Access Memory&#xff0c;即静态随机存取存储器&#xff0c;是一种常见的计算机内存类型。 SRAM电路通常由存储矩阵、地址译码器和读/写控制电路三…

小程序内使用路由

一:使用组件 1)创建组件 2)在需要的页面的json/app.json可实现局部使用和全局使用 在局部的话,对象内第一层,window配置也是第一层,而在全局配置也是在第一层,window在window对象内.第二层.内部执行遍历不一样. 3)页面使用 上述所写可实现在页面内使用组件.效果是页面内可以将…

十四天学会Vue——Vue核心(理论+实战)中篇(第二天)

声明&#xff1a;是接着上篇讲的哦&#xff0c;感兴趣可以去看一看~ 这里一些代码就不写了&#xff0c;为了缩减代码量&#xff0c;大家知道就可以了&#xff1a; Vue.config.productionTip false //阻止 vue 在启动时生成生产提示。热身小tips&#xff0c;可以安装这个插件&…

阿里通义千问大模型AI接入火车头自动生成内容插件

插件特点&#xff1a; 可以根据采集的关键词&#xff0c;自动生成文章可自定义提示词 也可以分析标题重写一个标题2个提问标签 如有需要可自由增加对话标签自己可以设置TXT关键词导入&#xff0c;自动采集生成 安装说明&#xff1a; 1.需要python环境 &#xff0c;具体可以…

HTML5 游戏开发基础及流程

目录 XMLHttpRequestAPI游戏开发者的Web技术游戏引擎HTML5游戏开发流程HTML5游戏核心技术 功能技术音频Web Audio API图形WebGL (OpenGL ES 2.0)输入Touch events, Gamepad API, 设备传感器,WebRTC (en-US), Full Screen API, Pointer Lock API语言JavaScript (或是 C/C++ 使用…

新楚文化知网收录文学艺术类期刊投稿

《新楚文化》是由国家新闻出版总署批准&#xff0c;湖北省文学艺术界联合会主管&#xff0c;湖北今古传奇传媒集团有限公司主办的正规期刊。主要刊登文化、文学、艺术类稿件&#xff1b;包括传统文化、非遗、历史文化、地方文化、中外友好文化交流、文学作品研究、艺术研究等方…

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…