P1094 [NOIP2007 普及组] 纪念品分组 Python (贪心算法)

 题目地址: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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值