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

题解:洛谷 B4359 [GESP202506 三级] 分糖果

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

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

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


【题目来源】

洛谷:B4359 [GESP202506 三级] 分糖果 - 洛谷

【题目描述】

n nn位小朋友排成一队等待老师分糖果。第i ii位小朋友想要至少a i a_iai颗糖果,并且分给他的糖果数量必须比分给前一位小朋友的糖果数量更多,不然他就会不开心。

老师想知道至少需要准备多少颗糖果才能让所有小朋友都开心。你能帮帮老师吗?

【输入】

第一行,一个正整数n nn,表示小朋友的人数。

第二行,n nn个正整数a 1 , a 2 , … , a n a_1,a_2,…,a_na1,a2,,an,依次表示每位小朋友至少需要的糖果数量。

【输出】

输出一行,一个整数,表示最少需要准备的糖果数量。

【输入样例】

4 1 4 3 3

【输出样例】

16

【核心思想】

  1. 问题分析:给定n nn位小朋友,第i ii位至少需要a i a_iai颗糖果,且每位小朋友分得的糖果必须严格多于前一位。求最少需要准备的总糖果数。这是一个贪心策略问题,核心在于在满足单调递增约束的前提下,让每个小朋友分得尽可能少的糖果。

  2. 算法选择

    • 贪心构造:从左到右遍历,每位小朋友的糖果数取a i a_iais i − 1 + 1 s_{i-1} + 1si1+1的最大值,确保既满足最低需求又满足严格递增
  3. 关键步骤

    • 读入数据:读取n nn和数组a [ 1.. n ] a[1..n]a[1..n]
    • 贪心构造i ii1 11n nn):
      • s i ← max ⁡ ( a i , s i − 1 + 1 ) s_i \leftarrow \max(a_i, s_{i-1} + 1)simax(ai,si1+1)
      • 解释:s i s_isi至少为a i a_iai(满足最低需求),且至少为s i − 1 + 1 s_{i-1} + 1si1+1(满足严格多于前一位)
    • 累加求和a n s ← ∑ i = 1 n s i ans \leftarrow \sum_{i=1}^{n} s_iansi=1nsi
    • 输出结果a n s ansans
  4. 时间/空间复杂度

    • 时间复杂度:O ( n ) O(n)O(n),单次线性遍历
    • 空间复杂度:O ( n ) O(n)O(n),存储s ss数组(可优化为O ( 1 ) O(1)O(1)滚动变量)
  5. 贪心策略的核心思想

    • 局部最优保证全局最优:对于第i ii位小朋友,在满足所有约束条件下取最小值,即max ⁡ ( a i , s i − 1 + 1 ) \max(a_i, s_{i-1} + 1)max(ai,si1+1)。这个局部最优选择不会影响后续的选择(因为后续只需满足> s i > s_i>si),因此贪心策略正确
    • 单调递增的最低成本:严格递增序列的最低成本构造方式是每次只比前一位多1 11,即s i = s i − 1 + 1 s_i = s_{i-1} + 1si=si1+1。但当a i a_iai更大时,必须以a i a_iai为下限
    • 前缀依赖:第i ii位的最优解只依赖于前一位的值,具有无后效性,适合从左到右的贪心处理
    • 空间优化:实际上只需维护前一个s i − 1 s_{i-1}si1的值,无需完整数组,可优化为O ( 1 ) O(1)O(1)空间
    • 适用于带约束的单调序列构造、最小成本满足条件类贪心问题

【算法标签】

#普及- #贪心

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 定义int为long long类型constintN=1005;// 定义数组最大长度intn;// 输入的数字个数inta[N];// 存储原始数字数组ints[N];// 存储处理后的数字数组intans=0;// 存储最终结果signedmain(){// 输入数字个数cin>>n;// 输入n个数字for(inti=1;i<=n;i++)cin>>a[i];// 处理数组,确保s[i]至少比前一个大1for(inti=1;i<=n;i++)s[i]=max(a[i],s[i-1]+1);// 计算处理后数组的总和for(inti=1;i<=n;i++){ans+=s[i];}// 输出最终结果cout<<ans<<endl;return0;}

【运行结果】

4 1 4 3 3 16
http://www.cnnetsun.cn/news/3498437.html

相关文章:

  • HarmonyOS ArkUI Marquee 跑马灯与 Gauge 仪表盘:公告滚动与数据展示
  • 【计算机毕业设计】本科生学习资源整合功能设计与实现
  • 【AI大模型微调】第 3 章 微调整体流程
  • 为什么你的团队还没启用Gemini会议助手?——来自Google Cloud认证架构师的3个致命认知盲区
  • 基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
  • 【计算机毕业设计】农产品销售系统设计与实现
  • C++ 性能优化:移动语义、完美转发与返回值优化
  • Three.js WebGL 安全加固实战:Shader 来源验证、WebGL 扩展沙箱与纹理域名白名单
  • 灾备演练:切换 DR 站点后的全国 SpeedCE 点检
  • ImageGlass终极指南:跨平台免费开源图片查看器的完整解决方案
  • 又一个神级画图 Skill 开源,再见 draw.io!
  • 【AI专栏】图解深度学习-AI infra工程师必知必会 - 第 04 章:训练 vs 推理
  • 不同算力下 AI 视频生成效果对比:RTX4090 vs A100 实测差距有多大
  • 1. 专业冰场建设,哪些公司实力较强?全面解析冰场建设市场2. 专业冰场建设实力强的公司有哪些?冰场建设企业大盘点3.
  • 瑜伽馆管理系统有什么功能?约课系统哪家好?
  • 【Java基础】分支结构与循环语句 超详细笔记(零基础易懂)
  • 2 机器学习基础
  • 知识图谱增强的 RAG——GraphRAG 的架构原理与 Java 实现路径
  • API调用失败率下降73%?揭秘Gemini辅助编程中被忽略的4层上下文校验机制
  • 告别复制粘贴!2026年程序员必备的 AI 辅助编程“防坑”指南
  • 为什么有些论文答辩提前结束,老师还直接让通过了?
  • Python GPU 任务调度:CUDA 显存管理和多进程隔离
  • 一款开源免费的游戏俱乐部管理系统
  • VisualCppRedist AIO:解决Windows软件兼容性问题的终极方案
  • 【AI工具选型指南】拒绝技术焦虑!给小白和开发者的最佳实操建议(附工具清单)
  • Gemini真实适用边界大起底(非宣传口径),含教育/科研/企业三场景落地率数据+决策树图谱
  • Excel冻结窗格功能全解析:三步锁定表头,浏览大数据表不再迷失
  • 庆阳国省笔试课程机构深度测评:六家课程服务与效果细节拆解
  • Vue2 SSE 流式对话完整前端代码
  • 3步掌握开源视频下载神器:轻松收藏全网视频资源