巧克力 蓝桥杯国赛全真模拟测试卷(上)

点击此处查看其它题目icon-default.png?t=N3I4http://t.csdn.cn/x6OiC

题目描述

小蓝很喜欢吃巧克力,他每天都要吃一块巧克力。

一天小蓝到超市想买一些巧克力。超市的货架上有很多种巧克力,每种巧克力有自己的价格、数量和剩余的保质期天数,小蓝只吃没过保质期的巧克力,请问小蓝最少花多少钱能买到让自己吃 x 天的巧克力。

输入描述

输入的第一行包含两个整数 x,n,分别表示需要吃巧克力的天数和巧克力的种类数。

接下来 n 行描述货架上的巧克力,其中第 i 行包含三个整数 ai​,bi​,ci​,表示第 i 种巧克力的单价为 ai​,保质期还剩 bi​ 天(从现在开始的 bi​ 天可以吃),数量为 ci​。

输出描述

输出一个整数表示小蓝的最小花费。如果不存在让小蓝吃 x 天的购买方案,输出 −1−1。

输入输出样例

示例

输入

10 3
1 6 5
2 7 3
3 10 10

输出

18

样例说明

一种最佳的方案是第 11 种买 55 块,第 22 种买 22 块,第 33 种买 33 块。前 55 天吃第 11 种,第 66、77 天吃第 22 种,第 88 至 1010 天吃第 33 种。

评测用例规模与约定

对于 3030% 的评测用例,n,x≤1000;

对于所有评测用例,1≤n,x≤100000,1≤ai​,bi​,ci​≤109。

思维:

首先两个限制条件,1:价格,2:保质期,我们要吃够n天,不吃过期的,还要吃的便宜
如果我们将巧克力按照价格递增排序,就可以解决价格问题
对于保质期问题,我们可以从后往前考虑,因为如果我们从前往后考虑,有可能会导致吃不够n天
例如:我们想吃够7天 ,巧克力有 A:1元 ,保质期7天,剩余4个 B:2元,保质期3天,剩余3个,此时从前往后考虑就是先吃a,结果会导致吃不够7天

代码实现:

n,m=map(int,input().split())
arr=[]
for _ in range(m):
    arr.append(list(map(int,input().split())))
arr.sort(key=lambda x:x[0])

y=n#日期
s=0#共花钱
while y>0:#日期倒序保证了日期选择合理
    for x in arr:#顺序保证了低价
        if x[1]>=y and x[2]>0:#没过保质期而且还有
            x[2]-=1
            s+=x[0]
            break
    else:#没有满足条件
        break
    y-=1#日期向前

if y>0:
    print(-1)
else:
    print(s)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自 在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值