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

题解:洛谷 P15800 [GESP202603 六级] 选数

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:[P15800 GESP202603 六级] 选数 - 洛谷

【题目描述】

给定两个包含n nn个整数的数组a = [ a 1 , … , a n ] a=[a_1,\dots,a_n]a=[a1,,an]b = [ b 1 , … , b n ] b=[b_1,\dots,b_n]b=[b1,,bn]。你需要指定若干下标p 1 < ⋯ < p k p_1\lt \cdots\lt p_kp1<<pk1 ≤ k ≤ n 1\leq k\leq n1kn)使得以下条件成立:

  • 1 ≤ p i ≤ n 1\leq p_i\leq n1pin1 ≤ i ≤ k 1\leq i\leq k1ik);
  • p i + 1 ≥ p i + b p i p_{i+1}\geq p_i+b_{p_i}pi+1pi+bpi1 ≤ i < k 1\leq i< k1i<k)。

你需要在满足以上条件的前提下最大化∑ i = 1 k a p k \sum_{i=1}^k a_{p_k}i=1kapk,也即最大化数组a aa对应下标的整数之和。

【输入】

第一行,一个正整数n nn,表示数组长度。

第二行,n nn个正整数a 1 , a 2 , … , a n a_1,a_2,\dots,a_na1,a2,,an,表示数组a aa

第三行,n nn个正整数b 1 , b 2 , … , b n b_1,b_2,\dots,b_nb1,b2,,bn,表示数组b bb

【输出】

一行,一个整数,表示在满足下标条件的前提下,数组a aa对应下标的整数之和的最大值。

【输入样例】

4 1 2 3 4 3 3 1 1

【输出样例】

7

【算法标签】

#普及# #线性DP-一维#

【代码详解】

// 40分版本#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=100005;intn,a[N],b[N],ans;// dp[i] 表示以第 i 个活动结尾时,能获得的最大价值intdp[N];intlen=0;signedmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}for(inti=1;i<=n;i++){cin>>b[i];}for(inti=1;i<=n;i++){// 初始化:只选择第 i 个活动dp[i]=a[i];// 考虑在 i 之前的活动 jfor(intj=1;j<i;j++){// 检查活动 j 结束后是否可以安排活动 iif(i>=j+b[j]){// 如果可以,则尝试从活动 j 转移到活动 idp[i]=max(dp[i],dp[j]+a[i]);}}}// 找到所有 dp[i] 中的最大值for(inti=1;i<=n;i++){ans=max(ans,dp[i]);}cout<<ans<<endl;return0;}
// 100分版本#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=100005;intn,a[N],b[N];// dp[i]: 到时间i为止能获得的最大收益(不包含在时间i开始的任务)intdp[N];signedmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}for(inti=1;i<=n;i++){cin>>b[i];}intans=0;for(inti=1;i<=n;i++){// 情况1: 在时间i开始执行任务i// 收益 = 到时间i为止的最大收益 + 任务i的收益ans=max(ans,dp[i]+a[i]);// 如果执行任务iintfinish_time=i+b[i];if(finish_time<=n){// 在任务i结束时更新收益dp[finish_time]=max(dp[finish_time],dp[i]+a[i]);}// 情况2: 在时间i不执行任何任务// 收益延续到下一个时间点dp[i+1]=max(dp[i+1],dp[i]);}// 注意:最终答案不一定是dp[n],因为可能在n时刻之前就已经得到了最大收益// 我们已经在循环中通过ans记录了所有可能的最大值cout<<ans<<endl;return0;}

【运行结果】

4 1 2 3 4 3 3 1 1 7
http://www.jsqmd.com/news/770354/

相关文章:

  • 2026年高性价比资产盘点服务商,大型厂商与效率提升方案 - 品牌2026
  • 【计算机网络】第14篇:TCP连接管理的有限状态机模型——三次握手与四次挥手的严格推导
  • 学生尤克里里怎么选?|从启蒙到进阶,4款实测爆款推荐
  • 保姆级教程:在Ubuntu 20.04上为ARM开发板交叉编译GStreamer 1.14.0(含Xilinx PetaLinux工具链)
  • UndertaleModTool终极指南:快速掌握GameMaker游戏修改的完整教程
  • 2026年资产管理软件盘点:全类型企业专属解决方案推荐 - 品牌2026
  • 如何为Android应用集成仅80KB的轻量级PDF阅读器?终极指南
  • 2026上海长宁区冷库安装公司:专业团队赋能高效冷链建设 - 品牌2025
  • 体验 taotoken 聚合端点在高峰期的请求稳定性与低延迟
  • OpenClaw汉化版部署指南:本地AI助手从入门到精通
  • Python语音合成实战:用rick-voice库快速实现角色化TTS
  • 核心组件大换血:Backbone与Neck魔改篇:YOLO26魔改主干特征:引入CloFormer模块,利用轻量级注意力捕捉高频细节
  • AISMM高管汇报模板深度拆解(SITS2026闭门会议首曝版)
  • BepInEx终极指南:5步掌握Unity游戏插件开发全流程
  • 国内粉末涂料厂家选型白皮书:合规、品质与服务基准 - 奔跑123
  • 用JLink和TopJTAG Probe搞定二手FPGA板卡引脚定义:一个JTAG边界扫描的实战案例
  • 2026奇点大会核心成果解密(AISMM快速评估版技术白皮书首曝)
  • 从硬件到代码:手把手拆解DMA外挂的完整链条(含Apex实战代码分析)
  • OpenRGB终极指南:如何用开源方案统一控制所有RGB设备,告别多软件混乱
  • Qt项目实战:用QString的indexOf()高效处理用户输入和日志解析
  • 从玩具车到3D打印机:直流电机H桥三种驱动模式到底该怎么选?一篇讲清应用场景
  • 【国家级AISMM评估资质认证团队标准】:基于37个政务/金融案例反向推导的4.2人最小可行团队模型
  • 如何3步为PDF添加智能导航书签:开源工具的完整指南
  • OpenClaw消息镜像插件:跨平台消息同步与自动化流转实战
  • 终极免费音乐解锁工具:3步轻松解密任何加密音乐文件
  • 深入聊聊Xilinx MIPI CSI-2 RX Subsystem IP:在Zynq UltraScale上解码OV5640视频的配置要点与性能调优
  • STM32H7实战:用CubeMX+FreeRTOS打造一个能插拔的SD卡虚拟U盘(附源码)
  • 使用curl命令在无图形界面的服务器中测试Taotoken接口
  • 免费Switch模拟器Ryujinx:在电脑上畅玩任天堂游戏的完整方案
  • 别再乱码了!从ASCII到UTF-8,5分钟搞懂程序员必知的字符编码原理