这是一道博弈论中的最优策略问题,核心是双方(小红、小紫)在目标相反的情况下,通过贪心选择对自己最有利的元素。
解题思路
- 明确目标与操作影响:
- 小红先手,目标是让最终的
x尽可能小;拿元素时,x += 该元素(因此小红会优先选较小的元素,减少x的增加量)。 - 小紫目标是让最终的
x尽可能大;拿元素时,x -= 该元素(因此小紫会优先选较小的元素,减少x的减少量)。
- 小红先手,目标是让最终的
- 贪心策略: 将数组按升序排序(小元素在前),双方轮流取当前最小的元素(小红先取)—— 这样双方都能做出对自己最优的选择。
- 计算结果:
小红取排序后索引为偶数(0、2、4…)的元素,小紫取索引为奇数(1、3、5…)的元素;最终
x = 小红取的元素和 - 小紫取的元素和。
代码实现(Python)
n = int(input())
a = list(map(int, input().split()))
# 数组升序排序
a.sort()
sum_red = 0 # 小红拿的元素之和
sum_purple = 0 # 小紫拿的元素之和
for i in range(n):
if i % 2 == 0:
# 索引为偶数:小红拿
sum_red += a[i]
else:
# 索引为奇数:小紫拿
sum_purple += a[i]
# 计算最终x的值
print(sum_red - sum_purple)
该方法的时间复杂度为 O(n log n)(主要来自排序),可高效处理 n ≤ 10^5 的数据规模。



京公网安备 11010502036488号