资讯动态

GESP 2024年9月 小杨的武器 题解|贪心详细讲解

发布时间:2026/10/26 12:12:40 来源:尧图企业网站定制
这是 GESP 2024年9月 的一道贪心题。题目本身不难但有几个地方特别容易出错我把踩过的坑都写出来希望能帮刚学到这里的朋友少走弯路。题目来源ACGO A75461 2024年9月 五级赛事场次2024年9月 五级一、题目信息题目名称小杨的武器赛事场次2024年9月 五级难度定位五级涉及知识点贪心题目链接https://www.acgo.cn/problemset/info/75461坑点无数人 WA 的核心局部最优的选取依据正确性的证明思路反证法/交换论证。题意简述小杨有 n 种不同的武器他对第 i 种武器的初始熟练度为 cᵢ。小杨会依次参加 m 场战斗每场战斗小杨只能且必须选择一种武器使用假设小杨使用了第 i 种武器参加了第 j 场战斗战斗前该武器的熟练度为 cᵢ则战斗后小杨对该武器的熟练度会变为 cᵢ aⱼ。需要注意的是aⱼ 可能是正数0 或负数这意味着小杨参加战斗后对武器的熟练度可能会提高也可能会不变还有可能降低。小杨想请你编写程序帮他计算出如何选择武器才能使得 m 场战斗后自己对 n 种武器的熟练度的最大值尽可能大。前置知识这道题用到的前置知识不多我们先把它补齐即使你刚学到这里也能看懂。贪心的前提每一步都选当前看起来最优的方案但必须能证明这样能得到全局最优否则要换成其他方法。二、思路分析先看清楚题目要我们做什么把题目读两遍我们提取出关键信息输入是什么、要输出什么、有哪些约束条件。这道题考查的是贪心属于这类题里比较基础的一道把题目要求一步步翻译成代码逻辑就能解决。我的思考过程读完题之后我的第一反应是这样的m 场战斗第 j 场无论选哪种武器都会给该武器加 aⱼ要最大化最终熟练度的最大值。关键洞察每场战斗加数 aⱼ 是固定的与选哪把武器无关——所以把全部正贡献都堆到同一把武器上最划算。设所有 aⱼ 的总和为 S含负数则会让某把武器受损。要最大化某个单人值就是选初始熟练度最大的武器把「所有正值 aⱼ 之和」加给它答案为 max(cᵢ) sum(正 aⱼ)。更严谨地说可以只用正值增益集中在一把武器上其余场次随意分摊给别的武器。需要说明的是上面这个思路是把题目要求直译成代码得到的没有用到什么高级技巧。对于这类基础题读准题意加写对边界比追求巧妙解法更重要因为考试里这种题是必须拿满分的。三、完整代码 逐行注释#include bits/stdc.h using namespace std; const int N 100010; int a[N], c[N]; int main(){ int n, m; cinnm; // 读入 int mx -10000; for (int i 1; i n; i){ // 遍历 cinc[i]; // 读入 mx max(mx,c[i]); } for (int i 1; i m; i){ // 遍历 cina[i]; // 读入 } for (int i 1; i m; i){ // 遍历 if (n 1 || a[i] 0){ // 判断 mx a[i]; } } coutmx\n; // 输出 return 0; }四、代码分段拆解完整代码在上面下面把它拆成几块逐块说明。第一步引入头文件#include bits/stdc.h using namespace std;#include iostream提供输入输出功能using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C 程序的开头照写即可。第二步读入数据cinnm; cinc[i]; cina[i];注意变量的类型要能装下题目的数据。数据可能超过 21 亿时要改用long long。第三步核心处理逻辑for (int i 1; i n; i){ for (int i 1; i m; i){ for (int i 1; i m; i){这一段是整道题的关键也是贪心的体现。看循环的三个要素从哪里开始、什么时候结束、每次怎么变化。这三个要素任何一个写错结果都会不对。第四步按要求输出coutmx\n;输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA这种分丢得最可惜。五、实例模拟把样例代进去手动模拟一遍思路会更清晰。以题目的第一组样例为例样例输入2 2 9 9 1 -1样例输出10把这份输入代进代码程序会先把数据依次读入然后进入循环逐个判断把满足条件的值累积起来最后按格式输出。建议你对照着代码在纸上走一遍前两次循环确认自己对每一步的理解都和程序一致。六、踩坑总结下面是做这道题时最容易出错的地方对照自己的代码检查一下变量类型选错虽然本题范围不大但养成习惯——凡是不确定范围时累加变量一律用long long成本为零但能保命。输出格式不符题目要求输出几行就输出几行行末换行、数字之间的空格都要严格对齐算法对了但格式错了同样判 WA这种分丢得最冤。特殊情况没特判把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入出题人最喜欢在这里设陷阱。七、知识点拓展最后总结一下这道题带给我们的通用经验本题考查贪心的基本写法这类题在考试中属于必得分项要练到能默写。写完代码后建议自己造几组边界数据测试特别是最小值和最大值。同一知识点在不同场次反复出现把这道题的写法吃透后面遇到同类题可以直接套用。八、适用人群适合正在备考 五级、想确认自己贪心基础是否扎实的同学。如果这篇题解对你有帮助欢迎点赞收藏。后续我会继续按场次整理 2024年9月 五级 的真题关注我可以第一时间看到更新。有更好的写法也欢迎在评论区交流。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑