题目地址:P1094 [NOIP2007 普及组] 纪念品分组
又是一道水题...但CSDN上没有详细Python代码,于是我就来水一贴,对于想要学算法提升能力的同学来说可以刷这套题单:能力全面提升综合题单
读完题目后我们可以快速得出,既然要求最小的的分组数目,而且题目中说“每组最多只能包括两件纪念品”,对此,我们的贪心思想便是每个分组如果可以的话最好包含两件纪念品,所以我们用双指针来表示最大价值和最小价值,如果最大值+最小值 <= limit,则满足要求,塞入同一组,否则单独成一组。
完整代码:
limit = int(input())
n = int(input())
price = []
ans = 0
left, right = 0, n - 1
for i in range(n):
x = int(input())
if x <= limit: # 此礼物的价值 > limit,则不填入数组内
price.append(x)
price.sort()
while left <= right:
Dvalue = limit - price[right] # 求差值
if price[left] <= Dvalue:
ans += 1
left += 1
right -= 1
else:
ans += 1
right -= 1
print(ans)