尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
GESP 2023年9月 真题 巧夺大奖 完整题解(贪心)
记录一道 GESP 2023年9月 的贪心真题。这类题在考试里属于必得分项核心就那几行代码关键是别在小细节上丢分。题目来源ACGO A83120 2023年9月 五级赛事场次2023年9月 五级一、题目信息题目名称巧夺大奖赛事场次2023年9月 五级难度定位五级涉及知识点贪心题目链接https://www.acgo.cn/problemset/info/83120坑点这题失分基本都在这局部最优的选取依据正确性的证明思路反证法/交换论证。题意简述小明参加了一个巧夺大奖的游戏节目。主持人宣布了游戏规则1 、游戏分为 n 个时间段参加者每个时间段可以选择一个小游戏。2 、游戏中共有 n 个小游戏可供选择。3 、每个小游戏有规定的时限和奖励。对于第 i 个小游戏参加者必须在第 Tᵢ 个时间段结束前完成才能得到奖励 Rᵢ 。小明发现这些小游戏都很简单不管选择哪个小游戏他都能在一个时间段内完成。关键问题在于如何安排每个时间段分别选择哪个小游戏才能使得总奖励最高前置知识下面先把需要的基础知识理一遍不熟悉的朋友可以跟着看熟悉的直接跳过。贪心的前提每一步都选当前看起来最优的方案但必须能证明这样能得到全局最优否则要换成其他方法。二、思路分析先看清楚题目要我们做什么把题目读两遍我们提取出关键信息输入是什么、要输出什么、有哪些约束条件。这道题考查的是贪心属于这类题里比较基础的一道把题目要求一步步翻译成代码逻辑就能解决。我的思考过程读完题之后我的第一反应是这样的注释解析顺着这个方向往下想就得到完整做法结构体 game_t 存储每个小游戏的完成期限和奖励。比较函数 game_cmp 用于按照奖励降序排列小游戏。布尔数组 arrange 记录每个时间段是否已经安排了小游戏。主函数中使用贪心算法按照奖励降序排列小游戏并在每个时间段选择奖励最高的未安排小游戏。需要说明的是上面这个思路是把题目要求直译成代码得到的没有用到什么高级技巧。对于这类基础题读准题意加写对边界比追求巧妙解法更重要因为考试里这种题是必须拿满分的。三、完整代码 逐行注释#include iostream #include algorithm using namespace std; int n 0; // 初始化 struct game_t { int T, R; // T表示完成期限R表示奖励 } games[500]; // 定义一个比较函数按照奖励降序排列 bool game_cmp(game_t x, game_t y) { return x.R y.R; } bool arrange[500]; // 记录每个时间段是否已经安排了小游戏 int main() { cin n; // 读入 for (int i 0; i n; i) // 遍历 arrange[i] false; // 输入每个小游戏的完成期限 for (int i 0; i n; i) // 遍历 cin games[i].T; // 读入 // 输入每个小游戏的奖励 for (int i 0; i n; i) // 遍历 cin games[i].R; // 读入 // 按照奖励降序排列小游戏 sort(games, games n, game_cmp); int sum 0; // 初始化 // 遍历每个小游戏 for (int i 0; i n; i) { // 遍历 // 从小游戏的完成期限开始往前遍历时间段 for (int t games[i].T - 1; t 0; t--) { // 遍历 // 找到第一个未安排小游戏的时间段将该小游戏安排在这个时间段并累加奖励 if (!arrange[t]) { // 判断 arrange[t] true; sum games[i].R; break; } } } // 输出最终的总奖励 cout sum endl; // 输出 return 0; }四、代码分段拆解为了看得更清楚我们把代码按功能分成几段解释。第一步引入头文件#include iostream #include algorithm using namespace std;#include iostream提供输入输出功能using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C 程序的开头照写即可。第二步读入数据cin n; cin games[i].T; cin games[i].R;注意变量的类型要能装下题目的数据。数据可能超过 21 亿时要改用long long。第三步核心处理逻辑for (int i 0; i n; i) for (int i 0; i n; i) for (int i 0; i n; i) for (int i 0; i n; i) {这一段是整道题的关键也是贪心的体现。看循环的三个要素从哪里开始、什么时候结束、每次怎么变化。这三个要素任何一个写错结果都会不对。第四步按要求输出cout sum endl;输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA这种分丢得最可惜。五、实例模拟光看代码可能还不够直观我们用题目的样例实际跑一遍看看程序是怎么走的。以题目的第一组样例为例样例输入7 4 2 4 3 1 4 6 70 60 50 40 30 20 10样例输出230把这份输入代进代码程序会先把数据依次读入然后进入循环逐个判断把满足条件的值累积起来最后按格式输出。建议你对照着代码在纸上走一遍前两次循环确认自己对每一步的理解都和程序一致。六、踩坑总结下面是做这道题时最容易出错的地方对照自己的代码检查一下变量类型选错虽然本题范围不大但养成习惯——凡是不确定范围时累加变量一律用long long成本为零但能保命。输出格式不符题目要求输出几行就输出几行行末换行、数字之间的空格都要严格对齐算法对了但格式错了同样判 WA这种分丢得最冤。特殊情况没特判把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入出题人最喜欢在这里设陷阱。七、知识点拓展最后总结一下这道题带给我们的通用经验本题考查贪心的基本写法这类题在考试中属于必得分项要练到能默写。写完代码后建议自己造几组边界数据测试特别是最小值和最大值。同一知识点在不同场次反复出现把这道题的写法吃透后面遇到同类题可以直接套用。八、适用人群如果你已经掌握贪心的基本写法这道题可以用来巩固手感。这道题就讲到这里。我会持续更新各场次真题的详细拆解需要系统复习的同学可以关注这个系列。有问题欢迎评论区讨论。
RELATED

相关推荐

Spring Boot中Redis缓存穿透、击穿与雪崩解决方案

Spring Boot中Redis缓存穿透、击穿与雪崩解决方案

1. 项目概述Redis作为当前最流行的内存数据库之一,在Spring Boot项目中承担着重要的缓存角色。但在实际生产环境中,我们经常会遇到三个经典问题:缓存穿透、缓存击穿和缓存雪崩。这些问题轻则导致接口响应变慢,重则引发系统级故障。…

📅 2026/10/28 12:22:42
一文读懂ECC:从椭圆曲线密码到SAP迁移的实战指南

一文读懂ECC:从椭圆曲线密码到SAP迁移的实战指南

先说个很有意思的现象:同一个缩写"ECC",这几年我在完全不同的项目里反复撞见,而且每次的意思都不一样。第一次是在证书链解析里看到一行Trustwave Global ECC P384 Certification Authority,我以为又是哪家CA的怪名字&a…

📅 2026/10/28 12:22:42
Linux摄像头链路解析:rkisp驱动与V4L2媒体拓扑调试实践

Linux摄像头链路解析:rkisp驱动与V4L2媒体拓扑调试实践

简介:围绕瑞芯微平台图像信号处理驱动整理的一套 Linux 内核源码包,面向嵌入式影像开发、内核驱动学习及 RK 平台移植人员,可用于理解摄像头 ISP 驱动的设备树匹配、V4L2 子设备注册与平台驱动组织方式。包内共 17 个文件,以 C 源…

📅 2026/10/28 12:22:42
MORE NEWS

更多资讯

📰

Redis核心特性、数据类型与生产环境优化实战

1. Redis核心特性与应用场景解析Redis作为当下最流行的内存数据库之一,其价值远不止于简单的键值存储。我在实际生产环境中使用Redis已有七年时间,见证了它从简单的缓存工具演变为如今的多模数据处理平台。让我们先抛开那些教科书式的定义,从…

📰

嵌入式AI健康监测系统:多源传感器同步与端侧LSTM实时推理

简介:本资源是一份面向嵌入式与人工智能方向本科生的毕业设计文档,聚焦智能健康监测与建议系统的整体设计与实现方案,解决传统健康管理缺乏实时性、个性化与主动干预能力的问题。文档完整覆盖引言、文献综述、系统设计、实现与测试、结论等标…

📰

agent-skills 深度解析:用 CLI 和 TDD 打造可复用 AI 编码技能

1. 从"agent-skills"这个标题说起:它到底在解决什么问题第一次看到agent-skills这个仓库名,我脑子里冒出来的第一个念头是:这又是一个把提示词打包成文件夹的项目吗?翻了一圈之后发现,它想做的事情比"提…

📰

AI助手团队协作:提升开发效率的自动化实践

1. 项目概述:当AI助手学会团队协作最近在折腾一个有趣的实验:让aipy和workbuddy这两个AI助手在我的电脑上自主商议任务分工。想象一下这样的场景:当你同时打开多个开发环境时,aipy自动负责代码补全和语法检查,workbudd…

📰

MySQL分页查询优化与Spring Boot实践

1. 项目背景与核心需求MBA培训管理系统作为教育行业数字化转型的典型应用,其用户管理模块承担着机构与学员间信息交互的核心枢纽作用。在实际运营中,培训机构常面临学员数据量激增带来的性能瓶颈问题——当用户表记录突破10万条时,传统全量查…

📰

JavaScript实现北京时间毫秒级精确显示:UTC+8、Intl与在线校准全解析

前端页面上挂一个时钟,看起来是最没技术含量的活儿,但真要做到“毫秒跳动不飘、跨时区不偏、用户改系统时间也不乱”,坑比想象中多得多。我做过好几个需要展示精确时间的项目,有给交易类看板做时间戳显示的,也有给跨区…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬