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

GESP2026年6月认证C++五级( 第三部分编程题(2、晚宴))精讲



第三部分 第二题——《晚宴》

第一幕:美食晚宴开始了

1、有一天,小明参加了一场五星级晚宴。

桌子上摆着很多菜。

每道菜都有一个"美味度"。


(1)例如:

3 5 7 35 105

(2)主持人宣布了一个规则:

小明只能选两道菜,而且必须是两道菜。

而且还有一个特殊要求:

这两道菜必须互质!


(3)小明的目标是:

按照规则选,让两道菜的美味度之和最大。


第二幕:什么叫互质?

1、有的学生一看到:

互质

脑子一片空白。

其实非常简单。


2、老师拿出几个数字。


第一组

3 5

最大公约数:

gcd(3,5) = 1

所以:

互质

可以一起吃。


第二组

6 9

最大公约数:

3

不是:

1

所以:

不能一起选。

第三组

8 15

最大公约数:

1

是可以的。


3、互质 : gcd==1

以后看到:

互质

脑子立刻翻译成:

gcd(a,b)==1

这是学习数论最重要的结论之一。


第三幕:先不要写程序

1、先看样例。

3 5 7 35 105

2、我们先人工找一下。


(1)第一对:

3 5

互质。

和是:

8

(2)第二对:

3 7

互质。

和是:

10

(3)第三对:

35 7

最大公约数:

7

失败。


(4)第四对:

35 105

最大公约数:

35

失败。


(5)第五对:

5 35

最大公约数:

5

失败。


(6)继续……

最后发现:

3 35

互质。

和:

38

这是最大的。


(7)所以答案:

38

和样例一致。


第四幕:本题能用暴力枚举吗?

可以!


1、如果有5道菜。

3 5 7 35 105

2、每两道菜,都试一次。

3 5 3 7 3 35 3 105 5 7 5 35 ……

所有组合。

都检查。


3、暴力枚举的时间复杂度:

O(N^2)

本题中 2 <= n <= 1000,

完全没问题。


第五幕:使用两层循环:

1、外层循环:

第一个数

2、内层循环:

第二个数

3、代码:

for(i) for(j)

就是:

所有组合。


第六幕:如何更新答案?

1、我们先定义一个:

ans

开始:

0

2、现在:

第一组。

3 5

合法。

和:

8

3、于是:

ans = 8

4、下一组:

3 7

合法。

10

比:

8

大。

更新。

ans = 10

5、于是:

程序就是:

if(gcd(...)==1) ans=max(ans,a+b);

答案就按照我们的要求更新了。


第七幕:重点要写gcd 函数

1、因为:

互质

判断的是:

最大公约数。


2、所以要写:

gcd

函数来求最大公约数。


3、使用欧几里得算法:

int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); }

第八幕:完整代码

#include <iostream> #include <algorithm> using namespace std; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { int n; cin>>n; int a[1010]; for(int i=0;i<n;i++) cin>>a[i]; int ans=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(gcd(a[i],a[j])==1) { ans=max(ans,a[i]+a[j]); } } } cout<<ans<<endl; return 0; }

利用两层循环枚举所有两两组合,判断是否互质,如果互质就更新最大答案。


第九幕:程序复杂度分析

1、题目中:

n <= 1000

2、两层循环:

1000×1000 ≈100万

3、每次:

gcd

复杂度:

O(logV)

4、总复杂度:

O(n² logV)

对于本题的数据范围是完全可以通过的。


本题要掌握的知识(★★★★★)

这道题考点,首先就是要掌握gcd()函数,还要有正确的思维流程:

① 枚举所有可能方案 ↓ ② 判断是否合法 ↓ ③ 如果合法 ↓ ④ 更新最优答案

朴素算法模板

遇到类似"从很多方案中找到最优方案"的问题,可以想到下面这个模板:

ans = 初始值; for(枚举所有方案) { if(方案合法) { ans = max(ans, 当前方案); } }

这道《晚宴》就是这个基础模板的应用。


http://www.jsqmd.com/news/1113800/

相关文章:

  • 写论文要切 5 个平台?虎贲 AI 从选题到答辩全搞定,实证图表自动生成
  • 如何在通达信中实现自动化缠论分析:ChanlunX技术实现深度解析
  • 无电源排序的双向电平转换:ASC0101S推挽24Mbps模式下的工程实践与系统集成
  • ChatGPT批量处理任务必须掌握的6个底层参数:max_tokens、temperature、seed、response_format…工程师都在忽略的精度控制键
  • 什么是台区储能四可装置?——配电台区的“智能管家”
  • GLM-5.1开源落地指南:API调用、vLLM本地部署与Ollama轻量方案实测对比
  • 文件上传漏洞攻防全解析:从原理到实战的Webshell绕过与防御
  • AI模型选型避坑指南:识别虚假参数与合规接入实践
  • 逻辑回归处理类别不平衡的实战指南:从数据采样到阈值优化
  • 图像视频开发环境建议
  • 企业AI落地的难点不是模型,而是业务规则蒸馏
  • codex安装和使用skills
  • 安川弧焊电源节气原理分享
  • QEMU使用方法
  • UE5 Verse 编程语言完整体系指南
  • ASC0101S自动方向感应架构深度解析:传输门、单稳态加速器与无方向控制的双向电平转换
  • 企业级开源CMDB系统架构解析:构建智能IT资产管理的5大核心设计原则
  • codex对接1688运费,图搜实现选品
  • 从传统零食到健康赛道:马大姐「多谷时代」的技术破局路径分析
  • python、JavaScript 、JAVA等实例代码演示教你如何获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据)
  • 科研制图告别复杂软件!okbiye AI 绘图分档功能一站式解决全学科出图难题
  • 3步搭建个人音乐API服务:网易云音乐接口的终极解决方案
  • 我用 Codex 重写了同事维护三年的代码,他没说谢谢——而是找了领导
  • 装备制造行业PLM软件系统最新厂商盘点,助力行业数字化转型
  • 多维聚合数据操作:切片、钻取与立方体构建实战
  • 熊猫出海GEO发布《2026最新DeepSeek算法收录规则拆解》报告
  • 通达信缠论插件ChanlunX:3步实现智能缠论分析
  • 3个步骤彻底解决知网文献下载难题:CNKI-download知网爬虫工具完全指南
  • 当笔记遇到代码:如何在Obsidian中打造你的个人数据科学工作站
  • c++中的左值右值,以及左值引用和右值引用