1 条题解
-
0
参考答案与详细解析
一、 单项选择题
- B。插空法。6 个蓝球产生 7 个空隙(包括两端),从中选 4 个位置放入红球,方案数为 。
- A。。长度 1("a"):0, 2("ab"):0, 3("aba"):1, 4("abab"):2, 5("ababa"):3, 6("ababac"):0, 7("ababaca"):1。结果为 。
- C。线段树查询区间 访问的节点为:
[0,15],[0,7],[8,15],[0,3],[4,7](完全包含),[2,3],[3,3](完全包含),[8,11](完全包含),[12,15],[12,13](完全包含)。共 10 个节点。 - C。Trie 树节点:root(1), a(2), p(3), p(4, app结束), l(5), e(6, apple结束), y(7, apply结束), e(8, ape结束), b(9), a(10), t(11, bat结束), g(12, bag结束)。共 12 个节点。
- B。DAG 存在唯一拓扑排序的充要条件是图中存在一条包含所有顶点的有向路径(即哈密顿路径),此时拓扑序唯一且相邻顶点间必有边。
- B。二次探查 。23(1), 34(1->2), 45(1->2满->5), 12(1->2满->5满->10), 56(1->2满->5满->10满->6)。最终位置为 6。
- B。边权 。为最小化总权重,每个顶点 应直接连接到顶点 1,边权为 。总权重 = 。
- A。后序最后是
A,故根为A。中序中A分割左右子树:左D B E,右F C。左子树后序D E B,根为B,中序D B E分割得左D右E。右子树后序F C,根为C,中序F C分割得左F。前序遍历为:根-左-右A B D E C F。 - C。容量 15。物品:(3,8), (4,10), (5,12), (6,15), (7,18)。最优组合为选重量 3, 5, 7 的物品,总重量 ,总价值 。
- D。1 是整棵树的根节点,任何节点与根节点 1 的 LCA 必然是 1。因此 是不可能出现的。
- C。主定理:。。,属于主定理第二种情况的扩展,时间复杂度为 。
- C。最大堆插入后为:30 (根), 左子 25, 右子 15; 25 的子节点为 20, 10; 15 的子节点为 5。删除 30 后,5 移至根并下沉,堆变为:25, 20, 15, 10, 5。再删除 25,5 移至根并下沉,堆变为:20, 10, 15, 5。堆顶为 20。
- B。容斥原理。。;;。能被整除的数 = 。不能被整除的数 = 。
- B。分治法在合并时需要 时间计算跨越中点的最大子段和,存在大量重复计算;而 Kadane 算法通过 的状态转移避免了重复计算,将复杂度降至 。
- B。这是经典的带截止时间调度问题(最小化延迟惩罚等价于最大化按时完成的任务权重)。最优贪心策略为:按截止时间排序依次尝试加入,若总时间超过当前任务截止时间,则剔除已选任务中处理时间最长的任务(Moore-Hodgson 算法思想)。
二、 阅读程序
(1)
- A (正确)。 的二进制中 1 的个数分别为:1(1), 2(1), 3(2)。奇数个 1 的数有 1 和 2,共 2 个。
- A (正确)。
while(x)循环每次将 右移一位,循环次数等于 的二进制位数,即 。 - B (错误)。对于正整数,
x & 1和x % 2在判断奇偶性上完全等价,不会改变结果。 - B。 中二进制 1 的个数:1(1), 2(1), 3(2), 4(1), 5(2), 6(2), 7(3)。奇数个 1 的数有 1, 2, 4, 7,共 4 个。
- B。外层循环 次,内层
count_ones耗时 ,总时间复杂度为 。 - B。对于正整数,
>> 1和/ 2结果相同,且现代编译器优化后两者效率基本不变。
(2)
- A (正确)。连续递增子序列有
[1, 2, 5](长度3) 和[3, 4](长度2),最大长度为 3。 - A (正确)。若全部相等,
a[i] > a[i-1]始终为假,cur_len始终重置为 1,max_len保持初始值 1。 - B (错误)。若删除
cur_len = 1;,当遇到非递增元素时,cur_len不会重置,会继续累加或保持错误状态,导致结果错误。 - A。数组严格递减,
a[i] > a[i-1]始终为假,max_len保持初始值 1。 - B。程序使用了一个大小为 的
vector<int> a,空间复杂度为 。 - B。若初始为 0,当数组严格递减时,循环内
max_len不会被更新,最终输出 0,而正确答案应为 1(单个元素本身构成长度为 1 的序列)。
(3)
- A (正确)。逆序遍历保证了在更新
dp[j]时,dp[j - w[i]]使用的是上一轮(未加入当前物品)的状态,符合 0-1 背包每个物品只能用一次的要求。若正序,则会多次使用同一物品,变为完全背包。 - A (正确)。两层循环,外层 次,内层最多 次,时间复杂度为 。
- A (正确)。
dp全 0 初始化表示容量为任何值时,不选任何物品的价值为 0,允许背包有空余容量。 - B。物品:(2,3), (1,2), (3,4),容量 4。最优解为选择物品 2 (重1, 价2) 和物品 3 (重3, 价4),总重 4,总价值 。
- B。恰好装满的初始化标准做法:
dp[0] = 0(容量为0时价值为0,合法),其余dp[j] = -INF(表示不可达)。 - D。正序遍历变为完全背包。物品可无限次使用。容量 4 时,最优解为选 4 个物品 2 (重1, 价2),总价值 。
三、 完善程序
(1)二分查找
- A。找到满足
a[mid] >= x的位置,记录当前mid为潜在答案ans = mid。 - B。为了寻找“第一个”满足条件的元素,需要继续在左半区间查找,故
right = mid - 1。 - C。若
a[mid] < x,说明目标在右半区间,故left = mid + 1。 - A。题目要求输出“下标”,若找到则输出
ans。 - C。若
ans仍为初始值 ,说明未找到,按题目要求输出-1。
(2)最长递增子序列 (LIS)
- B。每个元素自身至少可以构成长度为 1 的递增子序列,故
dp数组初始化为 1。 - B。同理,最小可能的最长递增子序列长度为 1,故
max_len初始化为 1。 - B。状态转移方程:若
a[i] > a[j],则a[i]可以接在a[j]后面,长度为dp[j] + 1。 - B。每计算完一个
dp[i],都需要用它来更新全局最大值max_len。 - C。最终结果即为全局记录的最大长度
max_len。
- 1
信息
- ID
- 12659
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者