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

csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果

csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果

题目描述

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

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

输入格式

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

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

输出格式

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

输入输出样例 1
输入 1
4 1 4 3 3
输出 1
16
输入输出样例 2
输入 2
15 314 15926 53589793 238462643 383279502 8 8 4 1 9 7 1 6 9 3
输出 2
4508143253
说明/提示

对于所有测试点,保证1 ≤ n ≤ 1000 1 \leq n \leq 10001n10001 ≤ a i ≤ 10 9 1 \leq a_i \leq 10^91ai109

思路分析

题目要求为每个小朋友分配糖果数 (c_i),满足:

  • c i ≥ a i c_i \ge a_iciai(至少需要的数量)
  • c i > c i − 1 c_i > c_{i-1}ci>ci1(严格递增,i ≥ 2 i \ge 2i2

目标是最小化糖果总数∑ c i \sum c_ici

贪心策略:从前往后依次确定每个小朋友的糖果数,在满足上述约束的前提下取最小值。

  • 第一个小朋友:c 1 = a 1 c_1 = a_1c1=a1
  • 第 i 个小朋友(i ≥ 2 i \ge 2i2):必须同时满足c i ≥ a i c_i \ge a_iciaic i ≥ c i − 1 + 1 c_i \ge c_{i-1}+1cici1+1,因此取c i = max ⁡ ( a i , c i − 1 + 1 ) c_i = \max(a_i,\;c_{i-1}+1)ci=max(ai,ci1+1)

这样得到的序列一定是最优的,因为任何更小的分配都会违反某个约束。最终累加所有c i c_ici即为答案。

注意数据范围:n ≤ 1000 n \le 1000n1000a i ≤ 10 9 a_i \le 10^9ai109,总和可能超过 32 位整数范围,需使用 64 位整数(long long)。

代码实现

#include<bits/stdc++.h>usingnamespacestd;intn,a[1005];// n:人数, a:需求数组intmain(){cin>>n;for(inti=0;i<n;i++)cin>>a[i];longlongs=a[0],p=a[0];// s:总糖果数, p:前一个小朋友的糖果数for(inti=1;i<n;++i){longlongcur=max((longlong)a[i],p+1);// 当前最少糖果数s+=cur;// 累加p=cur;// 更新前一个值}cout<<s<<endl;return0;}

功能分析

  1. 输入处理:读取小朋友人数 n 和需求数组 a。
  2. 贪心构造
    • 第一个小朋友直接分配a 1 a_1a1颗糖果。
    • 后续每位小朋友分配max ⁡ ( a i , c i − 1 + 1 ) \max(a_i,\;c_{i-1}+1)max(ai,ci1+1)颗,保证需求与递增约束。
  3. 累加求和:使用long long避免溢出。
  4. 输出结果:打印最少需要的糖果总数。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.cnnetsun.cn/news/1928771.html

相关文章:

  • Java组件安全实战:FastJson漏洞利用与WAF绕过技巧
  • BibTeX参考文献实战指南:从入门到精通各类文献格式
  • STL算法库中的极值查找:从min_element/max_element到minmax_element的实战演进
  • 避开这些坑!在Windows上用TensorFlow部署YOLOv8模型的完整指南
  • 【评测系列2】从零实现 AgentBench评测系统:架构设计与实战
  • 模型热更新必须绕开的3个GPU内存陷阱,附NVIDIA Triton 3.4+自定义Backend实测对比报告
  • 【技术解析】GSConv与Slim-Neck:轻量级目标检测的平衡之道
  • 【2026倒计时预警】:SITS圆桌确认的3类“AI原生应用”将淘汰传统RPA/低代码平台
  • 深入拆解:一个PT100测温模块的硬件成本与设计取舍(附BOM清单)
  • QNAP Container Station部署MySQL后,Navicat连不上的3个常见原因及解决办法
  • 从零开始:KataGo围棋AI的完整配置与实战对弈指南
  • MATLAB实战:从语音信号到Mel Spectrogram(梅尔频谱图)的完整实现与参数调优
  • 如何部署并优化AOD-NET图像去雾模型
  • 功能安全——严重度(Severity)评估实战指南
  • 告别Homebrew安装烦恼:从零配置到完美卸载的一站式指南
  • 如何完整备份QQ空间:终极免费工具使用指南
  • 长沙儿童心理医院暖心指南与真实案例分享
  • 如何快速搭建物联网监控系统:Arduino IDE完整实战指南 [特殊字符]
  • 从零到一:利用MATLAB filterDesigner工具箱高效实现IIR/FIR滤波器设计与验证
  • 别再只聊Socket了!从零搭建一个IM系统,你得先搞懂这五个核心模块
  • 从OJ题到实战:手把手教你用C++实现AVL树(附完整代码与平衡因子计算)
  • SpringBoot集成MCP:从零构建企业级AI服务接口
  • 深入IMX6Q的LDB模块:拆解双通道LVDS同显/分显背后的IPU与数据流
  • 给学弟学妹的VLSI DSP通关秘籍:从Parhi那本“天书”到南大课程作业实战
  • Hugging Face模型参数查询指南:NLP开发者必备的模型选型技巧
  • YOLO11核心架构解析:从C3k2到C2PSA的演进之路
  • Python3.9环境下RobotFramework+RIDE完整配置指南(含常见问题解决)
  • 实际的物理过程会出现速度直接跳跃吗?
  • 常见紧固件成品有哪些?从高强度螺栓到铆接系统的应用全景解析
  • 不用改源码!更优雅的tiktoken离线方案:通过环境变量与本地缓存搞定cl100k_base