【动态规划专栏】专题三:简单多状态dp--------3.删除并获得点数

简介: 【动态规划专栏】专题三:简单多状态dp--------3.删除并获得点数


题目来源

本题来源为:

Leetcode 740. 删除并获得点数

题目描述

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

题目解析

还是老样子,先做一下预处理:

我们将数组中的数保存在arr中,转化成一次“打家劫舍”问题

算法原理

1.状态表示

经验+题目要求

对于本题而言就是:

f[i]表示:选择到i位置时,nums[i]必选,此时能获得最大点数
g[i]表示:选择到i位置时,不选nums[i],此时能获得最大点数

2.状态转移方程

和之前一样:

在i位置选和不选两种情况

因此状态方程为:

f[i]=g[i-1]+nums[i];
g[i]=max(f[i-1],g[i-1]);

3.初始化

只有0位置会发生越界,初始化一下0位置即可

4.填表顺序

从左往右,两个表同时填

5.返回值

max(f[n-1],g[n-1])

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int deleteAndEarn(vector<int>& nums) 
    {
        const int N =10001;
        //预处理:
        int arr[N]={0};
        for(auto x:nums)
            arr[x]+=x;
        //创建dp表
        vector<int> f(N);
        vector<int> g(N);
        //初始化
        f[0]=arr[0];
        //填表
        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]);
    }
};
相关文章
|
5G 调度
关键技术一:LTE 同构小区间干扰协调 | 带你读《5G UDN(超密集网络)技术详解》之十
本章节进一步详细解释 LTE 小小区相关的关键技术之一:LTE 同构小区间干扰协调,并且关联 着说明它们对后续 5G NR 小小区的基线性影响和适用情况。
关键技术一:LTE 同构小区间干扰协调 | 带你读《5G UDN(超密集网络)技术详解》之十
|
存储 前端开发 安全
LinkKit SDK 接入阿里云物联网平台(1)| 学习笔记
快速学习 LinkKit SDK 接入阿里云物联网平台(1)
996 2
LinkKit SDK 接入阿里云物联网平台(1)| 学习笔记
|
9月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
334 15
|
2月前
|
人工智能 机器人
智能体来了|AI智能体时代的趋势与机会(2025趋势解读)
智能体不是AI终点,而是人与智能共生的起点。2025年,AI从工具进化为“行动伙伴”,重塑工作与学习方式。「智能体来了」推动全民智能体教育,助力个人转型、企业升级,抢占未来红利。
|
Shell 网络安全 开发工具
秒懂 Git 与 Gitee (码云)
快速上手 git ,基础配置教程
3130 4
秒懂 Git 与 Gitee (码云)
|
Python
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
1877 0
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
|
JavaScript
vue中手机号码+座机号码、邮箱正则校验规则封装
vue中手机号码+座机号码、邮箱正则校验规则封装
1363 0
vue中手机号码+座机号码、邮箱正则校验规则封装
|
架构师 安全 5G
云栖进行时|分享:可编程网络的现在与未来
共论可编程技术、产业应用与行业前沿,共创智能新时代的网络技术创新空间~
云栖进行时|分享:可编程网络的现在与未来
|
Java 应用服务中间件 Maven
如何在 IDEA 中配置 tomcat,运行 web 项目?
如何在 IDEA 中配置 tomcat,运行 web 项目?对这个问题找了很久的答案,各种参差不全,其实非常的简单了,网上很多人的文章搞得很复杂,完全没必要。下面是我的采坑记录,写下来帮助大家。首先,需要确保: • JDK 环境已经安装 • Tomcat 已经下载好(不需要配置环境变量,下载一个压缩包解压出来就行)
951 0
如何在 IDEA 中配置 tomcat,运行 web 项目?