酷代码 AI
菜单
服务商

题目描述 小杨发现了 n n 个宝箱,其中第 i i 个宝箱的价值是 a i a i ​ 。 小杨可以选择一些宝箱放入背包并带走,但是小杨的背包比较特殊,假设小杨选择的宝箱中最大价值为 x x,最小价值为 y y,小杨需要保证 x − y ≤ k x−y≤k,否则小杨的背包会损坏。 小杨想知道背包不损坏的情况下,自己能够带走宝箱的总价值最大是多少。 输入格式 第一行包含两个正整数 n , k n,k,含义如题面所示。 第二行包含 n n 个正整数 a 1 , a 2 , … , a n a 1 ​ ,a 2 ​ ,…,a n ​ ,代表宝箱的价值。 输出格式 输出一个整数,代表带走宝箱的最大总价值。

以下是使用 Python 实现的代码来解决这个问题: ```python # 读取输入 n, k = map(int, input().split()) # 读取每个宝箱的价值 values = list(map(int, input().split())) # 对宝箱价值进行排序 values.sort() max_total_value = 0 # 双指针遍历 left = 0 for right in range(n): # 当不满足 x - y <= k 时,移动左指针 while values[right] - values[left] > k: left += 1 # 计算当前区间内宝箱的总价值 total_value = sum(values[left:right + 1]) # 更新最大总价值 max_total_value = max(max_total_value, total_value) print(max_total_value) ``` 代码解释 1. 输入读取:首先读取两个整数 `n` 和 `k`,分别表示宝箱的数量和最大差值限制。然后读取 `n` 个整数,表示每个宝箱的价值。 2. 排序:对宝箱的价值列表进行排序,以便后续使用双指针法。 3. 双指针遍历:使用两个指针 `left` 和 `right` 来确定满足条件的宝箱区间。`right` 指针不断向右移动,当 `values[right] - values[left] > k` 时,说明当前区间不满足条件,需要将 `left` 指针向右移动,直到满足条件为止。 4. 计算总价值:在满足条件的区间内,计算所有宝箱的总价值,并更新最大总价值。 5. 输出结果:输出最大总价值。 复杂度分析 - 时间复杂度:排序的时间复杂度为 $O(n log n)$,双指针遍历的时间复杂度为 $O(n)$,因此总的时间复杂度为 $O(n log n)$。 - 空间复杂度:主要使用了一个长度为 `n` 的列表来存储宝箱的价值,因此空间复杂度为 $O(n)$。 [2026-02-07 20:23:54 | AI问答 | 452点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多