老师已经为大家准备好电子打印版,需要完整电子版文件的朋友,可以拉到文末查看。 【答案解析】
1.解释:答案选D。 详细解析见下图——
2.解释:答案选D。
详细解析见下图——
3.解释:答案选B。
详细解析见下图—— 4.解释:答案选B。 详细解析见下图——
5.解释:答案选D。
详细解析见下图——
6.解释:答案选D。
选项A:分治。分治算法是将一个复杂的问题分解成多个相似的子问题,然后递归地解决这些子问题,最后将子问题的解合并得到原问题的解。DFS虽然有递归过程,但它主要是沿着一条路径不断深入探索,并不是将问题分解为多个独立的子问题并合并解,所以DFS没有运用分治思想,该选项错误。 选项B:贪心。贪心算法在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好的。而DFS在选择相邻未访问顶点时,并没有从全局最优的角度去选择,只是简单地选择一个未访问的相邻顶点继续探索,所以DFS没有运用贪心思想,该选项错误。 选项C:动态规划。动态规划是通过把原问题分解为相对简单的子问题,并保存子问题的解,避免重复计算,以解决复杂问题。DFS在执行过程中并没有保存子问题的解来避免重复计算,它只是按照深度优先的方式进行遍历,所以DFS没有运用动态规划思想,该选项错误。 选项D:回溯。回溯算法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。DFS在遍历图时,当某个顶点的所有相邻顶点均已被访问时,就退回到前一顶点继续搜索,这符合回溯的思想,所以DFS主要运用了回溯思想,该选项正确。 综上,答案选D。 7.解释:答案选B。 详细解析见下图—— 8.解释:答案选A。 详细解析见下图—— 9.解释:答案选A。 详细解析见下图—— 相关知识点的复习与拓展: 截至考试当年3月,有关二叉树深度优先搜索的三种遍历方式,可以参考下图帮助记忆——
10.解释:答案选B。 逐个选项校验—— 选项 A: 1,5,4,8,7,9,6,3,2 错误逻辑:序列第 4 位是 8,前一位是 4。 图中只有 5→8、8→4,不存在 4 指向 8 的边,从 4 无法走到 8,矛盾。 选项 B: 1,5,8,4,7,9,6,3,2 ①1→5(合法) ②5→8(合法) ③8→4(合法) ④4 回溯到 8,8→7(合法) ⑤7 回溯到 8,8→9(合法) ⑥9 回溯到 2,2→9;9 前驱是 6,9 回溯到 6(合法) ⑦6→3(合法) ⑧3→2(合法) 全程所有相邻节点都满足有向边关系,无逆向行走,符合 DFS 深度优先逻辑。 选项 C: 2,5,8,7,9,6,3,4,1 错误逻辑:倒数第二位是 4,最后一位是 1。 图中 1 能指向 4,4 没有指向 1 的边,无法从 4 走到 1。 选项 D: 8,9,6,3,2,5,1,4,7 错误逻辑:先访问 5,后访问 1。 从8出发,访问到 2 后,根据深度优先遍历“先深入再回溯”的规则,应直接访问1→4→7,而不是先访问 5 、再回溯 1 ……;选项中的顺序,不符合深度优先遍历“先深入再回溯”的规则,排除。正确答案:B。 11.解释:答案选B。 详细解析见下图—— 12.解释:答案选C。 详细解析见下图—— 13.解释:答案选D。 详细解析如下—— 14.解释:答案选D。 详细解析见下图——
15.解释:答案选C。 详细解析见下图——
相关知识点的复习与拓展:
【答案解析】
1.解释:正确。
详细解析见下图——
相关知识点的复习与拓展: 2.解释:错误。
详细解析见下图——
3.解释:正确。
详细解析见下图——
相关知识点的复习与拓展: 截至考试当年3月,关于指针传递/地址传递与值传递的区别,可以参考下面的表格和视频所示,加深理解—— 视频—— 已关注关注重播 分享 赞4.解释:错误。
动态规划和贪心算法虽然都能解决最值问题,但它们的适用场景有本质区别——
● 动态规划适用于具有最优子结构和重叠子问题的问题,它会考虑所有可能的子问题并保存结果,确保得到全局最优解。
● 贪心算法依赖贪心选择性质,即每一步做出局部最优选择,最终希望得到全局最优,但并非所有具有最优子结构的问题都满足贪心选择性质。
📌 反例说明
最典型的反例是0-1背包问题:
● 动态规划可以在O(nW)的多项式时间内求解(n为物品数量,W为背包容量)。
● 贪心算法无法得到最优解,例如,当物品重量和价值不成正比时,优先选择单位价值最高的物品可能会导致背包剩余空间无法利用,最终总价值不是最大。
📌 总结
存在大量可以用动态规划求解,但无法用贪心算法得到最优解的问题。只有当问题同时具备最优子结构和贪心选择性质时,贪心算法才能得到最优解。
5.解释:正确。
详细解析见下图——
相关知识点的复习与拓展: 6.解释:错误。
详细解析如下——
相关知识点的复习与拓展: 7.解释:正确。
深度优先遍历的序列通常不唯一,但题目中给出了两个关键约束: ● 每个顶点有不同的编号:避免了顶点标识产生歧义。
● 总是优先选择编号更小的相邻顶点:明确了顶点访问顺序的优先级规则。
在这两个约束下,每次选择下一个访问的顶点都是唯一确定的,因此从指定顶点开始的遍历序列必然是唯一的。 题干的说法是正确的✅ 。
8.解释:错误。
详细解析见下图——
9.解释:错误。
详细解析见下图——
10.解释:正确。
详细解析见下图——
GESP 2026年3月 C++七级 拆分
#include<iostream>using namespace std;// 定义模数常量,题目要求对 10^9 取模const int MOD = 1e9;/*** 快速幂函数,用于计算 (base^exp) % MOD** 由于 n 最大可达 10^6,直接循环相乘会超时。* 使用快速幂算法可以将时间复杂度降低到 O(log exp)。** @param base 底数* @param exp 指数* @return long long 计算结果*/longlongpower(longlong base, longlong exp){long long res = 1; // 初始化结果为 1base %= MOD; // 先对底数取模,防止溢出while (exp > 0) {// 如果当前指数是奇数,将当前的 base 乘入结果中if (exp % 2 == 1) {res = (res * base) % MOD;}// 底数自乘(相当于进位),指数除以 2base = (base * base) % MOD;exp /= 2;}return res;}intmain(){// 关闭cin与stdio同步,加速cin输入速度ios::sync_with_stdio(false);// 解绑cin与cout,避免cout刷新拖慢cin读取cin.tie(nullptr);int t;if (cin >> t) {while (t--) {int n;cin >> n;// --- 情况 1:n 较小 (n <= 3) ---// 此时不拆分或者拆分出的乘积不如原数大(例如 3=1+2, 1*2=2<3)if (n <= 3) {cout << n << '\n';continue;}// --- 情况 2:n > 3,利用贪心策略拆分 ---// 计算 n 中包含多少个 3int cnt = n / 3;// 计算余数int rem = n % 3;long long ans = 0;if (rem == 0) {// 余数为 0:正好全部拆成 3// 结果 = 3^(n/3)ans = power(3, cnt);}else if (rem == 1) {// 余数为 1:// 拿出一个 3 和这个 1 组合成 4 (即 2+2),因为 2*2 > 3*1// 所以 3 的个数减 1,再乘以 4// 结果 = 3^(cnt-1) * 4ans = (power(3, cnt - 1) * 4) % MOD;}else if (rem == 2) {// 余数为 2:// 直接保留这个 2,因为 2 > 1*1// 结果 = 3^cnt * 2ans = (power(3, cnt) * 2) % MOD;}cout << ans << '\n';}}return 0;}代码思路——
GESP 2026年3月 C++七级 物流网络
#include<bits/stdc++.h>// 常用宏定义#define pii pair<ll,ll>#define mp make_pair#define fi first#define se second#define ll long long // 将 ll 定义为 long long,防止费用溢出(最大 1e9*5000=5e12)using namespace std;// 快速读入(支持负数)inline ll read(){ll x=0,f=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f = 1;;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return f?-x:x;}constexpr ll N=5007, M=10007; // N最大点数,M最大边数(双向边,邻接表大小需2*m)// 链式前向星存图ll ver[M], head[N], nxt[M], edge[M], tot;// 加边函数(无向边,调用两次)voidadd(ll x,ll y,ll z){ver[++tot]=y, nxt[tot]=head[x], head[x]=tot;edge[tot]=z;}bitset<N> vis; // 标记是否已确定最短距离ll d[N]; // 距离数组// 原始输入边的结构体struct es{ll x,y,w,b; // 起点、终点、费用、景观评分}e[N];ll n,m;// Dijkstra 求从 1 到所有点的最短路(当前图已经建好)voiddij(){memset(d,0x3f,sizeof d); // 初始化为无穷大vis.reset(); // 清空访问标记d[1]=0;priority_queue<pii, vector<pii>, greater<pii> > q;q.push(mp(0,1));while(q.size()){auto x=q.top().se; q.pop();if(vis[x]) continue;vis[x]=1;for(ll i=head[x]; i; i=nxt[i]){ll y=ver[i], z=edge[i];if(d[y] > d[x] + z){d[y] = d[x] + z;q.push(mp(d[y], y));}}}}intmain(){// 文件重定向(已注释)// freopen("T.in","r",stdin);// freopen("T.out","w",stdout);n=read(), m=read();for(ll i=1;i<=m;i++){e[i].x=read();e[i].y=read();e[i].w=read();e[i].b=read();}ll ans = 0x3f3f3f3f3f3f3f3f; // 答案初始化为极大值// 枚举哪条边作为“免费边”,且它必须是路径上景观评分最大的边for(ll i=1; i<=m; i++){// 每次重新建图,清空链式前向星memset(head, 0, sizeof head);memset(ver, 0, sizeof ver);memset(edge, 0, sizeof edge);memset(nxt, 0, sizeof nxt);tot = 0;// 建图规则:// 1. 边 j == i :费用设为 0(免除费用)// 2. 边 j != i 且 e[j].b <= e[i].b :正常加入,因为 i 必须是评分最高的,其他边不能超过它// 3. 边 j != i 且 e[j].b > e[i].b :不加入,因为若路径包含 i,则 i 不是最高评分(非法)for(ll j=1; j<=m; j++){if(j == i){add(e[j].x, e[j].y, 0);add(e[j].y, e[j].x, 0);}else if(e[j].b <= e[i].b){add(e[j].x, e[j].y, e[j].w);add(e[j].y, e[j].x, e[j].w);}}// 在当前图中跑最短路dij();// 更新最小费用ans = min(ans, d[n]);}// 如果答案仍为无穷大说明不可达,输出 -1,否则输出 anscout << (ans == 0x3f3f3f3f3f3f3f3f ? -1 : ans);return 0;}代码思路——首先枚举哪条边免费,注意风景比它大的边不要加入到图中,不然它可能就不是路径中风景最大的边了。然后每次建一次图跑一次dijkstra,最后取最小值即可。注意特判不连通的情况。
时间复杂度时间复杂度为O(mnlogn)。
课程体系——
需要无水印PDF格式文件, 或者课程体系咨询, 欢迎扫描下面二维码添加好友垂询。
▍ 声明:本文整理自网络,如有侵权,请联系删除。
本公号刊载此文,是出于合法合理地分享和传播信息,扩大大受众范围,促进学术交流,推动共同进步之目的。公众号持有人郑重声明,本文的发布,将严格遵守相关规定和法律法规,不侵犯任意潜在作者的权益,不改变引用原文(若有)的意图和内容。若有来源标注错误或侵犯了您的合法权益,请随时与我们联系协商,联系(QQ):993225721,我们将及时更正、删除。文章若有幸得到转载,首先,公众号持有人感谢转载人为读者阅读提供了有价值的信息和知识,希望文章能够在被转载的平台上得到更广泛的传播和交流;其次,转载人应充分考虑到转载动作本身所可能带来的相应的风险和责任,包括但不限于侵犯知识产权、侵犯他人权益等行为所引起的法律责任,确保本文的合法传播和使用。同时,本人也极其愿意在转载过程中尽力配合转载人了解、关注、规避、消除相关的潜在风险。若转载人有相任何关疑虑,同样欢迎随时与我们联系协商,联系(QQ):993225721。 喜欢您关注我们哦——























































