解题思路:
python代码超时,思路上感觉没什么问题,可能是python的运行效率太慢了。
假设每个品种的巧克力用cho[i]表示,cho[i][0]代表价格,cho[i][1]代表剩余保质期天数,cho[i][2]代表剩余个数。
建立一个变量now,代表已经买了多少块巧克力。我们可以发现,对于一种巧克力我们最多能买的个数cho[i][1]-now。
了解了这点之后,我们在分情况进行购买即可。代码中有标注。
①将这些巧克力根据价格升序排序。
②遍历这些巧克力。
参考代码:
def f(x,m): cho = [] for i in range(m): temp = tuple(int(i) for i in input().strip().split()) cho.append(temp) cho.sort(key = lambda x:x[0]) now = 0 sum = 0 for i in range(m): if cho[i][1] - now <= 0: #第i种巧克力不能买 continue if cho[i][1] - now <= cho[i][2]: #第i种巧克力最多能买的个数<=第i种巧克力剩余的个数(供大于求) if x - now >= cho[i][1] - now: #我们还需要买的巧克力个数>=第i种巧克力最多能买的个数 sum = sum + (cho[i][1] - now)*cho[i][0] now = cho[i][1] else: #我们还需要买的巧克力个数<=第i种巧克力最多能买的个数 sum = sum + (x - now)*cho[i][0] now = x else: #第i种巧克力最多能买的个数>第i种巧克力剩余的个数(供不应求) if x - now >= cho[i][2]: sum = sum + (cho[i][2])*cho[i][0] now = now + cho[i][2] else: sum = sum + (x - now)*cho[i][0] now = x if now == x: print(sum) break if now != x: print(-1) if __name__ == '__main__': x,m = map(int,input().strip().split()) f(x,m)
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复