news 2026/10/26 12:12:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP 2024年9月 小杨的武器 题解|贪心详细讲解

这是 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; cin>>n>>m; // 读入 int mx = -10000; for (int i = 1; i <= n; ++ i){ // 遍历 cin>>c[i]; // 读入 mx = max(mx,c[i]); } for (int i = 1; i <= m; ++ i){ // 遍历 cin>>a[i]; // 读入 } for (int i = 1; i <= m; ++ i){ // 遍历 if (n == 1 || a[i] > 0){ // 判断 mx += a[i]; } } cout<<mx<<"\n"; // 输出 return 0; }

四、代码分段拆解

完整代码在上面,下面把它拆成几块逐块说明。

第一步:引入头文件

#include <bits/stdc++.h> using namespace std;

#include <iostream>提供输入输出功能,using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C++ 程序的开头,照写即可。

第二步:读入数据

cin>>n>>m; cin>>c[i]; cin>>a[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){

这一段是整道题的关键,也是贪心的体现。看循环的三个要素:从哪里开始、什么时候结束、每次怎么变化。这三个要素任何一个写错,结果都会不对。

第四步:按要求输出

cout<<mx<<"\n";

输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA,这种分丢得最可惜。

五、实例模拟

把样例代进去手动模拟一遍,思路会更清晰。

以题目的第一组样例为例:

样例输入

2 2 9 9 1 -1

样例输出

10

把这份输入代进代码,程序会先把数据依次读入,然后进入循环逐个判断,把满足条件的值累积起来,最后按格式输出。建议你对照着代码在纸上走一遍前两次循环,确认自己对每一步的理解都和程序一致。

六、踩坑总结

下面是做这道题时最容易出错的地方,对照自己的代码检查一下:

  1. 变量类型选错:虽然本题范围不大,但养成习惯——凡是不确定范围时,累加变量一律用long long,成本为零但能保命。
  2. 输出格式不符:题目要求输出几行就输出几行,行末换行、数字之间的空格都要严格对齐,算法对了但格式错了同样判 WA,这种分丢得最冤。
  3. 特殊情况没特判:把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入,出题人最喜欢在这里设陷阱。

七、知识点拓展

最后总结一下这道题带给我们的通用经验:

  • 本题考查贪心的基本写法,这类题在考试中属于必得分项,要练到能默写。
  • 写完代码后建议自己造几组边界数据测试,特别是最小值和最大值。
  • 同一知识点在不同场次反复出现,把这道题的写法吃透,后面遇到同类题可以直接套用。

八、适用人群

适合正在备考 五级、想确认自己贪心基础是否扎实的同学。

如果这篇题解对你有帮助,欢迎点赞收藏。后续我会继续按场次整理 2024年9月 五级 的真题,关注我可以第一时间看到更新。有更好的写法也欢迎在评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 12:10:58

技术债务中的死亡攻击:识别与应对策略

1. 项目背景与概念解析"死亡攻击"主题在开发者社区中是一个颇具争议但极富讨论价值的话题。这个主题源自第一次世界大战期间著名的"死亡士兵"传说——1915年奥斯曼帝国加里波利战役中&#xff0c;据说被毒气攻击后的士兵仍能继续战斗。这个历史事件后来被金…

作者头像 李华
网站建设 2026/10/26 12:10:24

智链网络验证

智链网络验证系统&#xff08;官网www.vmpx.cn&#xff09;核心功能如下&#xff1a;全新的底层重构&#xff0c;使加密更强&#xff0c;超强的防破解支持api调用加密/支持一件加密/源码对接21 种语言示例&#xff0c;C/C、C#、Python、Go、Java、JavaScript / TypeScript、PHP…

作者头像 李华
网站建设 2026/10/26 12:10:07

Ubuntu虚拟机无法上网怎么排查:从虚拟网络到DNS的分层诊断

虚拟机里那台 Ubuntu 昨天还好好的&#xff0c;今天一开机&#xff0c;右上角网络图标变成一个小问号&#xff0c;终端里 ping 什么都回不来——这个场景我遇到过不下十次。有的发生在系统更新之后&#xff0c;有的发生在宿主机换了 WiFi 之后&#xff0c;还有一次是同事把虚拟…

作者头像 李华
网站建设 2026/10/26 12:09:08

Ubuntu系统备份与恢复实战:基于tar的完整方案

1. 项目概述作为一名Linux系统管理员&#xff0c;我深知系统备份与恢复的重要性。特别是在Ubuntu这样的生产环境中&#xff0c;一次意外的系统崩溃可能导致数小时甚至数天的业务中断。今天我要分享的是我在Ubuntu系统备份、恢复与迁移方面的实战经验&#xff0c;这些方法已经在…

作者头像 李华
网站建设 2026/10/26 12:08:28

CSRF与SSRF攻击原理及企业级防御实战

1. 从两个真实案例看CSRF与SSRF的危害 去年某电商平台发生过一起典型的CSRF攻击事件&#xff1a;攻击者伪造了一个"限时抢购"页面&#xff0c;诱导已登录的用户点击。由于用户浏览器自动携带了认证cookie&#xff0c;服务器误以为是用户本人操作&#xff0c;导致大量…

作者头像 李华
网站建设 2026/10/26 12:07:31

Spice电路仿真工具包拆包实战:从C源码编译到解析解验证

简介&#xff1a;这份资源是面向电子工程、电路仿真方向研究人员与工程师的 NASA AIF Spice 工具包&#xff0c;基于 C 语言构建&#xff0c;在经典 SPICE 电路模拟器基础上扩展了高级交互式故障检测与分析能力&#xff0c;适用于航空航天等高可靠性电子设备的设计验证场景&…

作者头像 李华