【2020秋招笔试】人人-优惠券价格 - 或运算

题目:
给n个商品的价格,然后给出优惠券满减的价格,求问可使用这张优惠券最低价格是多少。
商品总价超过优惠券价格的三倍,或者低于优惠券,返回 -1。

输入:(优惠券值m、商品个数n、n个商品的价格)
1000 4 555 500 450 460
输出:
1055

import sys
line = sys.stdin.readline().strip()
list_ = list(map(int, line.split()))
m, n = list_[0], list_[1]
nums = list_[2:]
sum_ = sum(nums)
dp = [0 for i in range(sum_ + 1)]
if(sum_ < m):
    print(-1)
elif(sum_ == m):
    print(m)
else:
    dp[0] = 1
    for i in range(n):
        for j in range(sum_, nums[i] - 1, -1):
            dp[j] |= dp[j - nums[i]] '''有1出1,全0出0, 比if判断要快速'''
    for i in range(m + 1, sum_ + 1):
        if(i // m >= 3):
            print(-1)
            break
        if(dp[i] == 1):
            print(i)
            break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值