解题思路:
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语言代码)浏览:1371 |
字符串比较 (C语言代码)答案错误????浏览:597 |
WU-printf基础练习2 (C++代码)浏览:2002 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:668 |
杨辉三角 (C语言代码)浏览:484 |
字符逆序 (C语言代码)浏览:618 |
图形输出 (C语言代码)浏览:940 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:645 |
众数问题 (C语言代码)浏览:670 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:797 |