林老师 · 客观题题库 · 专题 18 贪心 · 复习强化

专题 18 贪心 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题18贪心-复习强化
题目总数103 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 17 大部分,合计 103 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

贪心基本概念

7 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

贪心算法的核心思想是( )。

(1 分)
第 2 题 A2 未作答

关于贪心算法的适用性,正确的是( )。

(1 分)
第 3 题 A3 未作答

「贪心选择性质」指的是( )。

(1 分)
第 4 题 A4 未作答

贪心算法与动态规划共同依赖「最优子结构」,它的含义是( )。

(1 分)
第 5 题 A5 未作答

与枚举、动态规划相比,贪心的特点(在适用时)是( )。

(1 分)
第 6 题 A6 未作答

判断一个贪心策略不可靠,最有力的方式是( )。

(1 分)
第 7 题 A7 未作答

贪心题的通用解题框架依次是( )。

(1 分)

经典贪心问题

8 QUESTIONS · 2 POINTS EACH
第 8 题 B1 未作答

人民币面额 {1,5,10,20,50,100}\{1, 5, 10, 20, 50, 100\} 找零 8787 元,贪心策略「优先用大面额」给出的张数是( )。

(1 分)
第 9 题 B2 未作答

活动安排问题(选最多的互不重叠活动)的经典贪心策略是( )。

(1 分)
第 10 题 B3 未作答

nn 个人接水,每人耗时不同,一个人接水时后面的人都要等。使所有人等待时间总和最小的安排是( )。

(1 分)
第 11 题 B4 未作答

部分背包(物品可分割装 fractions)的最优贪心策略是( )。

(1 分)
第 12 题 B5 未作答

合并果子问题(两堆合并代价为两堆之和,求总代价最小)的贪心策略是( )。

(1 分)
第 13 题 B6 未作答

均分纸牌问题(相邻两堆可传递纸牌,求使各堆相等的最少移动堆次)的贪心视角是( )。

(1 分)
第 14 题 B7 未作答

删数问题(删去 kk 位使剩余数字组成的数最小)的贪心策略是( )。

(1 分)
第 15 题 B8 未作答

把若干正整数拼成一排组成最小的数,正确的比较规则是( )。

(1 分)

区间类贪心

7 QUESTIONS · 2 POINTS EACH
第 16 题 C1 未作答

区间调度(选最多互不重叠区间)按右端点排序贪心之所以正确,直观原因是( )。

(1 分)
第 17 题 C2 未作答

区间选点问题(用最少的点使每个区间至少含一个点)的贪心策略是( )。

(1 分)
第 18 题 C3 未作答

用最少的线段覆盖目标区间 [0,10][0, 10] 的贪心策略是( )。

(1 分)
第 19 题 C4 未作答

若干活动各有起止时间,求最少需要几间教室(同一活动时间内一间教室只能容纳一个活动)。正确的贪心是( )。

(1 分)
第 20 题 C5 未作答

把互相重叠的活动分进不同组(组内不重叠),最少组数恰好等于( )。

(1 分)
第 21 题 C6 未作答

大量贪心题第一步都是排序,排序在贪心中的角色是( )。

(1 分)
第 22 题 C7 未作答

区间贪心问题的通用套路是( )。

(1 分)

贪心策略方法

7 QUESTIONS · 2 POINTS EACH
第 23 题 D1 未作答

「先排序再贪心」最典型的例子是( )。

(1 分)
第 24 题 D2 未作答

「最值贪心」指的是( )。

(1 分)
第 25 题 D3 未作答

设计贪心的排序键,思路通常是( )。

(1 分)
第 26 题 D4 未作答

交换论证(exchange argument)的思想是( )。

(1 分)
第 27 题 D5 未作答

比赛时验证贪心策略可靠性的实用手段是( )。

(1 分)
第 28 题 D6 未作答

nn 个元素先排序再线性扫描的贪心,时间复杂度通常是( )。

(1 分)
第 29 题 D7 未作答

下列哪种信号最提示「这题贪心可能行不通,考虑动态规划」( )。

(1 分)

贪心与其它算法

6 QUESTIONS · 2 POINTS EACH
第 30 题 E1 未作答

贪心与动态规划的深刻区别是( )。

(1 分)
第 31 题 E2 未作答

贪心与暴力枚举的关系是( )。

(1 分)
第 32 题 E3 未作答

贪心与分治的对比,正确的是( )。

(1 分)
第 33 题 E4 未作答

贪心与回溯(DFS 枚举所有方案)的本质区别是( )。

(1 分)
第 34 题 E5 未作答

物品重量 w = {2, 3, 4}、价值 v = {3, 4, 5}、容量 C=6C = 6。按单位价值贪心的 01 背包装法得到价值 77w=2+3w{=}2+3),而最优组合的价值是( )。

(1 分)
第 35 题 E6 未作答

题目数据范围达到 10610^6 甚至 10910^9 且要求「最小/最大」,通常暗示( )。

(1 分)

贪心正确性

5 QUESTIONS · 2 POINTS EACH
第 36 题 F1 未作答

证明贪心正确性的论证结构通常是( )。

(1 分)
第 37 题 F2 未作答

反证法证明贪心第一步安全的标准句式是( )。

(1 分)
第 38 题 F3 未作答

交换论证证明「接水时间短者在前」的思路是( )。

(1 分)
第 39 题 F4 未作答

归纳法证明贪心的骨架是( )。

(1 分)
第 40 题 F5 未作答

面额 {1,3,4}\{1, 3, 4\} 找零 66 元,贪心(优先大面额)的输出与最优解分别是( )。

(1 分)

应用扩展

6 QUESTIONS · 2 POINTS EACH
第 41 题 G1 未作答

四人过河耗时 1,2,5,101, 2, 5, 10,船载两人、需一人划回,全部过河的最短总时间是(本题按经典两方案贪心求解)( )。

(1 分)
第 42 题 G2 未作答

一条数轴上商店位于 {2,5,7,16}\{2, 5, 7, 16\},建一个货仓使到各商店距离总和最小,货仓应建在( )。

(1 分)
第 43 题 G3 未作答

种树问题(给定若干人群,每人要求某段路上至少种一棵树,求最少树数)的贪心策略是( )。

(1 分)
第 44 题 G4 未作答

两个窗口接水耗时分别固定为 3322,顾客依次到达各耗时 11,每人选择「更早空闲」的窗口。第 44 人(下标 33)接完水的时刻是(按 00 时刻起、编号 00 起模拟)( )。

(1 分)
第 45 题 G5 未作答

跳跃游戏:每格数字是最大跳跃距离。数组 {2, 3, 1, 1, 4} 从首格跳到末格的最少步数是( )。

(1 分)
第 46 题 G6 未作答

拼接数字串 {32, 3, 321}:拼成最小数与最大数分别是(按拼接字典序比较)( )。

(1 分)

易错综合

5 QUESTIONS · 2 POINTS EACH
第 47 题 H1 未作答

「贪心缺乏全局观」的典型表现是( )。

(1 分)
第 48 题 H2 未作答

活动安排误按「开始时间」排序贪心,可能出问题的原因是( )。

(1 分)
第 49 题 H3 未作答

「优先大面额」的找零贪心对人民币面额成立,其依赖的条件是( )。

(1 分)
第 50 题 H4 未作答

合并果子的贪心(每次合并最小两堆)与哈夫曼树的关系是( )。

(1 分)
第 51 题 H5 未作答

关于贪心算法,下列说法正确的是( )。

(1 分)

贪心代码基础

7 QUESTIONS · 2 POINTS EACH
第 52 题 I1 未作答

01int val[] = {100, 50, 20, 10, 5, 1};
02int m = 87, cnt = 0;
03for (int i = 0; i < 6; i++)
04    while (m >= val[i]) { m -= val[i]; cnt++; }
05cout << cnt;

输出是( )。

(1 分)
第 53 题 I2 未作答

01int val[] = {100, 50, 20, 10, 5, 1};
02int m = 63, cnt = 0;
03for (int i = 0; i < 6; i++)
04    while (m >= val[i]) { m -= val[i]; cnt++; cout << val[i] << " "; }
05cout << endl << cnt;

输出是( )。

(1 分)
第 54 题 I3 未作答

01int a[] = {3, 7, 1, 9, 4};
02// 循环两次:每次选出剩余元素的最大值并移除

两次选出的值依次是( )。

(1 分)
第 55 题 I4 未作答

01int a[] = {3, 7, 1, 9, 4};
02sort(a, a + 5, greater<int>());
03cout << a[0] + a[1];

输出是( )。

(1 分)
第 56 题 I5 未作答

01int a[] = {5, 2, 8, 3, 6};
02int l = 0, r = 4;
03for (int k = 0; k < 5; k++) {
04    if (a[l] <= a[r]) { cout << a[l] << " "; l++; }
05    else { cout << a[r] << " "; r--; }
06}

输出是( )。

(1 分)
第 57 题 I6 未作答

用暴力枚举与贪心解同一个「选两个数使和最大」的问题,两者的输出( )。

(1 分)
第 58 题 I7 未作答

「从数组中选出若干个互不相邻的数使和最大」用贪心「每次取当前最大并封锁邻居」(本题按该贪心执行),对 {3, 7, 1, 9, 4} 的选择顺序是( )。

(1 分)

区间贪心代码

7 QUESTIONS · 2 POINTS EACH
第 59 题 J1 未作答

活动(起,止)为 {{1,3},{2,5},{4,7},{1,8},{6,9},{8,10}},按结束时间贪心最多安排( )场。

(1 分)
第 60 题 J2 未作答

区间 {{1,4},{2,3},{3,5},{6,8},{5,7}},按右端点贪心放点覆盖所有区间,最少需要( )个点。

(1 分)
第 61 题 J3 未作答

线段 {{0,3},{1,6},{2,5},{3,8},{6,10},{5,9}} 覆盖目标 [0,10][0,10],按左端点排序、每步取可衔接线段中右端最远者,最少用( )条线段。

(1 分)
第 62 题 J4 未作答

活动 {{1,4},{2,5},{4,6},{5,8},{7,9}}(结束时刻等于开始时刻可复用教室),按开始时间排序配小根堆,最少需要( )间教室。

(1 分)
第 63 题 J5 未作答

区间 {{1,3},{2,5},{6,8},{8,10},{12,13}} 合并重叠(含端点相接)的区间后,剩下的区间数是( )。

(1 分)
第 64 题 J6 未作答

区间 {{1,3},{2,5},{4,7},{1,8},{6,9},{8,10}} 按右端点从小到大排序后,右端点序列是( )。

(1 分)
第 65 题 J7 未作答

活动(起,止){{1,3},{2,5},{4,7},{1,8},{6,9},{8,10}} 按结束时间从小到大贪心选择,第二个被选中的活动是( )。

(1 分)
拾壹

策略代码

6 QUESTIONS · 2 POINTS EACH
第 66 题 K1 未作答

物品重量 w = {2, 3, 4}、价值 v = {3, 4, 5}、背包容量 C=6C = 6,物品可分割。按单位价值贪心装包,最大价值是( )。

(1 分)
第 67 题 K2 未作答

三人接水耗时 {3, 1, 2},按最短先接的顺序安排,所有人的等待时间总和是(第一个人等待 00)( )。

(1 分)
第 68 题 K3 未作答

双窗口耗时 3322,四位顾客每人耗时 11、依次到达(00 时刻起),每人选更早空闲的窗口,第 44 人(下标 33)完成时刻是( )。

(1 分)
第 69 题 K4 未作答

w = {2, 3, 4}v = {3, 4, 5}C=6C = 6,01 背包(物品不可分割)按单位价值贪心,得到的价值是( )。

(1 分)
第 70 题 K5 未作答

数字串 15763 删去 22 个数字使剩余的数最小(贪心:每次删去第一个比后一位大的数字,没有则删末位),结果是( )。

(1 分)
第 71 题 K6 未作答

三人接水耗时 {3, 1, 2},按最短先接安排,从第一个人开始到所有人接完的总耗时是( )。

(1 分)
拾贰

堆贪心代码

5 QUESTIONS · 2 POINTS EACH
第 72 题 L1 未作答

果子堆 {1, 2, 9},每次合并最小两堆(代价为两堆之和),全部合并的总代价是( )。

(1 分)
第 73 题 L2 未作答

商店位于 {2, 5, 7, 16},货仓建在中位数区域(如位置 66),到各商店的距离总和是( )。

(1 分)
第 74 题 L3 未作答

权值 {1, 2, 3, 4, 5} 建哈夫曼树(每次合并最小两个),带权路径长度 WPL 是( )。

(1 分)
第 75 题 L4 未作答

果子堆 {1, 2, 9} 用小根堆模拟合并,两次合并的操作依次是( )。

(1 分)
第 76 题 L5 未作答

商店位于 {2, 5, 7, 16},使距离总和最小的货仓位置( )。

(1 分)
拾叁

构造型代码

6 QUESTIONS · 2 POINTS EACH
第 77 题 M1 未作答

01vector<string> v = {"32", "3", "321"};
02sort(v.begin(), v.end(), cmp);   // cmp(a,b): a+b < b+a
03string r; for (auto& x : v) r += x;

r 是( )。

(1 分)
第 78 题 M2 未作答

数字串 {32, 3, 321}a+b > b+a 从大到小排序后拼接,结果是( )。

(1 分)
第 79 题 M3 未作答

跳跃游戏数组 {2, 3, 1, 1, 4},从下标 00 跳到下标 44 的最少步数(贪心:每步在可达范围内选下轮覆盖最远)是( )。

(1 分)
第 80 题 M4 未作答

01// b = {3, 2, 1, 0, 4},维护最远可达 reach,逐格更新
02int reach = 0;
03for (int i = 0; i < 5; i++) {
04    if (i > reach) break;
05    reach = max(reach, i + b[i]);
06}
07cout << (reach >= 4 ? 1 : 0);

输出是( )。

(1 分)
第 81 题 M5 未作答

纸牌堆 {9, 8, 17, 6}(均值 1010),从左到右逐堆向右传递结算,最少移动堆次(有「欠账」传递即计一次)是( )。

(1 分)
第 82 题 M6 未作答

数字串 1432219 删去 22 个数字使剩余数最小(贪心删峰),结果是( )。

(1 分)
拾肆

完善程序

6 QUESTIONS · 2 POINTS EACH
第 83 题 N1 未作答

补全找零贪心的关键循环条件:

01int val[] = {100, 50, 20, 10, 5, 1};
02int m = 87, cnt = 0;
03for (int i = 0; i < 6; i++)
04    while (/* 1 */) { m -= val[i]; cnt++; }

空位 /* 1 */ 处应填( )。

(1 分)
第 84 题 N2 未作答

补全活动安排贪心的选中条件(活动已按结束时间排序):

01int cnt = 0, last = -1;
02for (int i = 0; i < n; i++)
03    if (/* 1 */) { cnt++; last = act[i].end; }

空位 /* 1 */ 处应填( )。

(1 分)
第 85 题 N3 未作答

补全排队接水(最短先接)的排序比较器:

01int t[N];
02sort(t, t + n, /* 1 */);

空位 /* 1 */ 处应填( )。

(1 分)
第 86 题 N4 未作答

补全合并果子每次取堆的语句:

01priority_queue<int, vector<int>, greater<int>> pq;
02int total = 0;
03while (pq.size() > 1) {
04    int a = pq.top(); pq.pop();
05    int b = /* 1 */;
06    pq.pop();
07    total += a + b;
08    pq.push(a + b);
09}

空位 /* 1 */ 处应填( )。

(1 分)
第 87 题 N5 未作答

补全区间选点贪心(按右端点排序)的放点条件:

01int lastPoint = -1e9;
02for (int i = 0; i < n; i++) {
03    if (/* 1 */) {
04        lastPoint = seg[i].right;
05        cnt++;
06    }
07}

空位 /* 1 */ 处应填( )。

(1 分)
第 88 题 N6 未作答

补全删数贪心的删除位置判定(找第一个比后一位大的数字):

01for (int r = 0; r < k; r++) {
02    int i = 0;
03    while (i + 1 < n && /* 1 */) i++;
04    erase(i);
05}

空位 /* 1 */ 处应填( )。

(1 分)
拾伍

综合代码

5 QUESTIONS · 2 POINTS EACH
第 89 题 O1 未作答

四人过河耗时 1,2,5,101, 2, 5, 10(船载两人、需一人划回),按经典两方案贪心(快者结对送船 vs 快者轮流陪)逐步决策,最短总时间是( )。

(1 分)
第 90 题 O2 未作答

路段位置 1177,要求区间 [1,3][1,3][2,5][2,5][4,6][4,6] 各至少一棵树,按右端点贪心(缺树则种右端点),最少棵数与种树位置是( )。

(1 分)
第 91 题 O3 未作答

区间 {{1,4},{2,3},{3,5},{6,8},{5,7}} 按右端点贪心放点,放的点依次是( )。

(1 分)
第 92 题 O4 未作答

四人接水耗时按编号为 {3号:1, 1号:2, 2号:3, 0号:4}(括号内为耗时),最短先接的安排下接水顺序的编号是( )。

(1 分)
第 93 题 O5 未作答

纸牌堆 {4, 12, 14}(均值 1010),从左到右传递结算(相邻堆间移动任意张,累计差非零即计一次移动)。第二堆与第一堆之间移动的张数、以及最少移动堆次分别是( )。

(1 分)
拾陆

易错代码

7 QUESTIONS · 2 POINTS EACH
第 94 题 P1 未作答

关于贪心代码的写法,下列说法正确的是( )。

(1 分)
第 95 题 P2 未作答

活动安排误按「开始时间」排序贪心,对活动 {{1,8},{2,3},{3,5},{6,9}} 的结果是( )。

(1 分)
第 96 题 P3 未作答

面额 {1,3,4}\{1, 3, 4\} 找零 66 元,「优先大面额」贪心的张数与最优张数分别是( )。

(1 分)
第 97 题 P4 未作答

合并果子若用「每次全排序取最小两个」的实现,正确写法要求每次合并后把新堆放回并重新排序。若只排一次序、之后顺序合并,对 {1, 9, 2} 的总代价是( )。

(1 分)
第 98 题 P5 未作答

活动安排的冲突判定写成 act[i].start > last(丢了等号),对「上一场 131\sim3、下一场 353\sim5」的影响是( )。

(1 分)
第 99 题 P6 未作答

w = {2, 3, 4}v = {3, 4, 5}C=6C = 6 的 01 背包,单位价值贪心与动态规划的答案对比是( )。

(1 分)
第 100 题 P7 未作答

拼接 {32, 3, 321} 成最大数,比较器 cmp(a, b) 应写( )。

(1 分)

真 题 演 练

3 QUESTIONS · 真题演练不计分
第 1 题 单选 未作答

新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。方案一:每次连续跑 33 公里可以消耗 300300 千卡(耗时半小时);方案二:每次连续跑 55 公里可以消耗 600600 千卡(耗时 11 小时)。小胖每周周一到周四能抽出半小时跑步,周五到周日能抽出一小时跑步。另外,教练建议小胖每周最多跑 2121 公里,否则会损伤膝盖。请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最多通过跑步消耗多少千卡?( )

(0 分)
CSP-J 2019 · 单选 第11题 | 知识点 贪心、模拟
第 2 题 单选 未作答

在数据压缩编码中的哈夫曼编码方法,在本质上是一种( )的策略。

(0 分)
CSP-J 2021 · 单选 第11题 | 知识点 贪心、哈夫曼编码
第 106~110 题 完善程序 (共 0 分) 未作答

(最小区间覆盖)给出 nn 个区间,第 ii 个区间的左右端点是 [ai,bi][a_i,b_i]。现在要在这些区间中选出若干个,使得区间 [0,m][0,m] 被所选区间的并覆盖(即每一个 0im0\le i\le m 都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。

输入第一行包含两个整数 nnmm1n50001\le n\le50001m1091\le m\le10^9)。

接下来 nn 行,每行两个整数 aia_ibib_i0ai,bim0\le a_i,b_i\le m)。

提示:使用贪心法解决这个问题。先用 Θ(n2)\Theta(n^2) 的时间复杂度排序,然后贪心选择这些区间。

试补全程序。

1  #include <iostream>
2 
3  using namespace std;
4 
5  const int MAXN = 5000;
6  int n, m;
7  struct segment { int a, b; } A[MAXN];
8 
9  void sort() // 排序
10  {
11      for (int i = 0; i < n; i++)
12          for (int j = 1; j < n; j++)
13              if (①)
14              {
15                  segment t = A[j];
16 
17              }
18  }
19 
20  int main()
21  {
22      cin >> n >> m;
23      for (int i = 0; i < n; i++)
24          cin >> A[i].a >> A[i].b;
25      sort();
26      int p = 1;
27      for (int i = 1; i < n; i++)
28          if (③)
29              A[p++] = A[i];
30      n = p;
31      int ans = 0, r = 0;
32      int q = 0;
33      while (r < m)
34      {
35          while (④)
36              q++;
37          ⑤;
38          ans++;
39      }
40      cout << ans << endl;
41      return 0;
42  }

106.

①处应填( )。

107.

②处应填( )。

108.

③处应填( )。

109.

④处应填( )。

110.

⑤处应填( )。

CSP-J 2020 · 完善程序 第39-43题 | 知识点 贪心、冒泡排序、结构体