解题思路:
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++代码)浏览:1173 |
时间转换 (Java代码)浏览:617 |
C语言训练-素数问题 (C语言代码)浏览:1695 |
【密码】 (C语言代码)浏览:350 |
ASCII帮了大忙浏览:797 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1052 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:388 |