当前位置: 首页 > article >正文

LeetCode题解【2140. 解决智力问题:逆序动态规划】

题目概述给定一个二维数组questions其中questions[i] [points_i, brainpower_i]。对于第i道题我们有两种选择解决这道题获得points_i分但接下来必须跳过brainpower_i道题跳过这道题不获得分数继续考虑下一道题。要求返回能够获得的最高分数。这道题本质上是一个典型的「选或不选」动态规划问题。难点在于如果选择当前题后续可选择的位置不是i 1而是i brainpower_i 1。思路分析对于每一道题我们都需要判断做当前题收益是多少不做当前题收益是多少然后取两者的最大值。假设当前处理到第i道题。如果跳过第i道题那么答案就等价于从第i 1道题开始能获得的最大分数。如果解决第i道题可以立即获得questions[i][0]分但是接下来要跳过questions[i][1]道题因此下一道可以继续选择的题目下标为iquestions[i][1]1如果这个下标没有越界那么做当前题的总收益就是questions[i][0]dp[iquestions[i][1]1]如果越界说明做完当前题后已经没有题目可以继续做了那么收益就是当前题本身的分数。状态定义定义dp[i]表示从第i道题开始能够获得的最大分数。最终答案就是dp[i]也就是从第0道题开始能够获得的最大分数。状态转移对于第i道题有两种选择。1. 不做当前题跳过当前题直接从下一题开始dp[i 1]2. 做当前题获得当前题分数questions[i][0]然后跳到下一道允许作答的题目next i questions[i][1] 1如果next n则questions[i][0] dp[next]如果next n则questions[i][0]因此状态转移方程为dp[i] max(不做当前题的收益, 做当前题的收益)展开后就是dp[i] max(dp[i 1], questions[i][0] dp[next])其中需要注意next越界的情况。为什么要倒序 DP因为dp[i]的计算依赖于后面的状态dp[i 1]dp[i brainpower_i 1]这些位置的下标都比i大。所以我们应该从后往前计算保证在计算dp[i]时它依赖的状态都已经被计算出来。这也是这道题适合使用逆序动态规划的原因。代码实现classSolution{public://可以替换为 using LL long long;typedeflonglongLL;LLmostPoints(vectorvectorintquestions){intnquestions.size();// dp[i] 表示从第 i 道题开始最多可以获得的分数// 由于总分可能超过 int 范围因此使用 long longvectorLLdp(n,0);// 最后一题没有后续题目// 如果从最后一题开始最优选择一定是做它dp[n-1]questions[n-1][0];// 从倒数第二题开始向前推// 因为 dp[i] 依赖的是 i 后面的状态for(intin-2;i0;i--){// 当前题做完后需要跳过的问题数量intindexquestions[i][1];// 当前题可以获得的分数intscorequestions[i][0];// 做完当前题之后下一道可以继续选择的题目下标intnextiindex1;// 情况一做当前题后已经没有后续题目可以做if(nextn){// 两种选择// 1. 不做当前题收益为 dp[i 1]// 2. 做当前题收益为 scoredp[i]max(dp[i1],(LL)score);}// 情况二做当前题后还能继续从 next 位置开始选择else{// 两种选择// 1. 不做当前题收益为 dp[i 1]// 2. 做当前题收益为 score dp[next]dp[i]max(dp[i1],(LL)scoredp[next]);}}// 从第 0 道题开始能获得的最大分数returndp[0];}};细节说明1. 为什么dp要用long long每道题的分数可能较大题目数量也不少。如果全部使用int在累加分数时可能会溢出。因此dp数组使用long long更稳妥。同时在进行加法或比较时也需要将score转换为long long(LL)scoredp[next]2. 为什么最后一题初始化为它本身的分数对于最后一道题来说后面已经没有其他题目了。如果从最后一道题开始考虑只有两种选择跳过它得分为0做它得分为questions[n - 1][0]。因为题目分数为正数所以最优选择一定是做最后一题。因此dp[n - 1] questions[n - 1][0]3. 边界情况如何处理当做完当前题后下一道可选题目的下标为nextiquestions[i][1]1如果next n说明已经越过数组范围后面没有题目可以继续做。此时做当前题的收益只有当前题分数score否则做当前题的收益为score dp[next]复杂度分析时间复杂度O(n)只需要从后往前遍历一遍数组每个位置的状态转移都是常数时间。空间复杂度O(n)使用了一个长度为n的dp数组总结这道题的核心在于把问题转化为「从当前位置开始能获得的最大分数」。对于每一道题都只有两种选择不做当前题转移到dp[i 1]做当前题获得当前分数并跳转到dp[i brainpower_i 1]。由于当前状态依赖后面的状态所以采用逆序动态规划从后往前计算即可。整体思路并不复杂但需要特别注意两个细节做当前题后跳转下标是否越界分数累加可能超过int范围需要使用long long。掌握了这两个点这道题就可以比较自然地写出线性复杂度的解法。

相关文章:

LeetCode题解【2140. 解决智力问题:逆序动态规划】

题目概述 给定一个二维数组 questions,其中 questions[i] [points_i, brainpower_i]。 对于第 i 道题,我们有两种选择: 解决这道题:获得 points_i 分,但接下来必须跳过 brainpower_i 道题;跳过这道题&a…...

蓝牙CVSD语音编解码

0 Preface/Foreword1 CVSD介绍1.1 CVSD全称CVSD: Continuous Variable Slope Delta modulation,连续可变斜率增量调整CVSD是经典蓝牙(Bluetooth Classic)里HFP通话最基础、最传统的语音编码方式。1.2 CVSD类型CVSD本质是&#xff…...

揭秘智能宏编辑革命:GSE宏编辑器如何重塑魔兽世界技能自动化

揭秘智能宏编辑革命:GSE宏编辑器如何重塑魔兽世界技能自动化 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-…...

ARM C/C++库多线程安全机制与优化实践

1. ARM C/C库多线程安全机制解析在嵌入式开发领域,多线程编程已成为提升系统性能的主流方案。ARM架构作为嵌入式系统的核心,其C/C标准库的多线程安全实现直接影响着系统稳定性和开发效率。与通用操作系统环境不同,ARM嵌入式环境通常没有完整的…...

小白友好:YOLOv8鹰眼目标检测镜像部署与初体验指南

小白友好:YOLOv8鹰眼目标检测镜像部署与初体验指南 1. 认识YOLOv8鹰眼目标检测 1.1 什么是YOLOv8鹰眼目标检测? YOLOv8鹰眼目标检测是一款基于Ultralytics YOLOv8模型的工业级实时多目标检测系统。它能够快速识别图像中的80种常见物体,包括…...

Pearcleaner:让macOS重获新生的智能清理伙伴

Pearcleaner:让macOS重获新生的智能清理伙伴 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾发现,即使删除了macOS上的应用程…...

AI内容安全工程:构建企业级LLM应用的防护体系

为什么内容安全是LLM应用的必答题? 2025年,全球已有多起因LLM应用内容安全缺失导致的重大事故:客服机器人被诱导发表种族歧视言论、AI助手泄露用户隐私数据、教育应用输出不适合未成年人的内容。随着AI监管法规趋严,内容安全不再是…...

音乐解锁完整指南:3步免费解密任何加密音乐文件

音乐解锁完整指南:3步免费解密任何加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://git…...

全面数据恢复方案:TestDisk与PhotoRec的实战技术深度解析

全面数据恢复方案:TestDisk与PhotoRec的实战技术深度解析 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 数据丢失是技术人员和普通用户都可能面临的严峻挑战。TestDisk与PhotoRec作为开源数据恢…...

告别ArUco?实测对比AprilTag与ArUco在机器人视觉引导中的性能差异

AprilTag与ArUco实战对比:机器人视觉引导系统的技术选型指南 当机器人需要在复杂环境中实现精准定位时,视觉基准系统的选择往往成为项目成败的关键。AprilTag和ArUco作为两种主流的视觉标记系统,各自拥有独特的优势与适用场景。本文将通过一组…...

CompressO:免费开源的终极跨平台视频压缩工具完整指南

CompressO:免费开源的终极跨平台视频压缩工具完整指南 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO …...

Windows上安装安卓应用:APK安装器的全新体验

Windows上安装安卓应用:APK安装器的全新体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK安装器是一款专为Windows系统设计的安卓应用安装工具&#…...

Qwerty Learner终极指南:如何通过打字练习高效记忆英语单词

Qwerty Learner终极指南:如何通过打字练习高效记忆英语单词 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:…...

告别SDK!用Vitis IDE给ZYNQ板子固化程序到Flash的保姆级图文教程

从SDK到Vitis:ZYNQ开发板Flash程序固化全流程精解 如果你是一位长期使用Xilinx SDK进行ZYNQ开发的工程师,最近打开Vitis IDE时可能会感到一丝陌生——就像走进曾经熟悉的办公室却发现所有家具都被重新排列过。这种不适感在尝试将程序固化到Flash时尤为明…...

告别C++编译等待:用Rust重写Qt小部件,体验极速构建与内存安全

告别C编译等待:用Rust重写Qt小部件,体验极速构建与内存安全 每次修改一行C代码后漫长的编译等待,是否让你在Qt开发中感到效率瓶颈?那些难以追踪的内存泄漏和悬空指针问题,是否已成为项目中的定时炸弹?今天&…...

别再手动写Dockerfile了!Docker AI Toolkit 2026自动生成AI应用容器镜像,支持37种框架+12类硬件加速器,3步完成交付

更多请点击: https://intelliparadigm.com 第一章:Docker AI Toolkit 2026:重新定义AI容器化交付范式 Docker AI Toolkit 2026 是面向生产级 AI 应用的一体化容器化开发套件,深度融合模型编译、硬件感知调度与可信推理链路验证能…...

Elasticsearch搜索排序实战:时间衰减函数(Decay Function)评分优化全解析

[TOC](Elasticsearch搜索排序实战:时间衰减函数(Decay Function)评分优化全解析)🌺The Begin🌺点点关注,收藏不迷路🌺前言 在内容搜索、电商推荐、新闻资讯、短视频、社区帖子等几乎所有搜索业务中,都有一个…...

英雄联盟Akari助手:5个智能功能让游戏操作更轻松

英雄联盟Akari助手:5个智能功能让游戏操作更轻松 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟中的繁琐操作而烦恼…...

# CentOS 7 + 中国服务器 + Codex + 中转 API 完整教程

CentOS 7 中国服务器 Codex 中转 API 完整教程 适用场景: 国内云服务器无法直连 OpenAI系统为 CentOS 7希望稳定使用 Codex CLI 这篇文章把安装、配置、避坑和最终可用方案一次讲清楚,适合直接照着操作。 一、先说核心问题 很多人在 CentOS 7 上安装 …...

从裸机到Linux设备树:RISC-V C驱动开发全链路打通,7步完成GPIO/UART/I2C三级适配

更多请点击: https://kaifayun.com 第一章:国产RISC-V芯片驱动开发全景概览 国产RISC-V生态正加速成熟,从平头哥玄铁、芯来Nuclei到赛昉JiangShan,多款高性能内核已进入量产阶段,驱动开发成为连接硬件能力与上层应用的…...

如何免费获得7款专业级思源宋体:设计师必备的完整字体包指南 [特殊字符]

如何免费获得7款专业级思源宋体:设计师必备的完整字体包指南 🎨 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目寻找高质量字体而烦恼吗&…...

LinkSwift:八大网盘直链下载助手终极指南,告别下载限速困扰

LinkSwift:八大网盘直链下载助手终极指南,告别下载限速困扰 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…...

给ADAS工程师的CIS相机选型避坑指南:CRA、QE、CFA这些参数到底怎么配?

给ADAS工程师的CIS相机选型避坑指南:CRA、QE、CFA这些参数到底怎么配? 在ADAS系统开发中,摄像头作为环境感知的核心传感器,其性能直接影响算法识别准确率。面对供应商琳琅满目的参数手册,工程师常陷入"参数陷阱&…...

告别高配置!10分钟用“魔珐星云”打造你的第一个具身智能数字人

前言: 在过去的一年里,大模型(LLM)颠覆了我们撸代码和写文案的方式。但在惊叹之余,开发者们往往面临着一个尴尬的落地痛点:无论后端的模型推理多快、多智能,一到前端交互,AI 就只能…...

如何用Python脚本免费获取11.9万英语单词标准发音音频库?

如何用Python脚本免费获取11.9万英语单词标准发音音频库? 【免费下载链接】English-words-pronunciation-mp3-audio-download Download the pronunciation mp3 audio for 119,376 unique English words/terms 项目地址: https://gitcode.com/gh_mirrors/en/Englis…...

信息增益与互信息在机器学习特征选择中的应用

1. 信息增益与互信息的核心概念当我在2013年第一次用决策树解决客户分类问题时,发现模型对某些特征异常敏感。后来才明白这是信息增益在起作用——它量化了特征对分类结果的影响程度。信息增益(Information Gain)和互信息(Mutual Information)这对孪生概念&#xff…...

智读致用|《一人企业》第五章:价值观锚定,小而美地行动

系列:《一人企业》读书笔记 第5篇 书名:《一人企业:一个人也能赚钱的商业新模式》 作者:保罗贾维斯(Paul Jarvis) ---很多人创业的起点是一个想法,或者一股热情。 想法很快就有了,…...

Perseus终极指南:3步解锁碧蓝航线全皮肤免费体验

Perseus终极指南:3步解锁碧蓝航线全皮肤免费体验 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 还在为碧蓝航线中那些令人心动的皮肤无法体验而烦恼吗?Perseus原生库补丁为你提供…...

为什么92%的Docker WASM项目在边缘网关失败?:2024最新CNCF边缘白皮书验证的4个隐性兼容陷阱

更多请点击: https://intelliparadigm.com 第一章:Docker WASM边缘计算部署的现状与挑战 WebAssembly(WASM)正迅速成为边缘计算场景中轻量、安全、跨平台执行代码的关键载体,而 Docker 社区对 WASM 的原生支持仍处于早…...

从玩Atari到堆方块:一文看懂DeepMind的Gato如何用同一个模型搞定600多种任务

从玩Atari到堆方块:Gato如何用统一架构征服600种任务 当你在手机上切换聊天应用和游戏时,大脑会自然地处理不同模式的输入输出——文字、图像、触控。这种多任务处理能力,现在AI也能做到了。DeepMind的Gato模型就像AI界的"瑞士军刀"…...