题库首页 › 蓝桥杯大赛(C语言) › 题目 14688

取糖果 题目描述: 圣诞节时,乐乐进入了一个神奇的糖果屋,糖果屋中有 n 个罐子,每个罐子中都有若干颗糖果。糖果屋的主人为了欢迎远道而来的乐乐,让乐乐感受到糖果屋的甜蜜,允许乐乐拿取 k 次糖果,拿取规则如下: 1)每次可以从任意一个罐子中拿取一颗糖果; 2)每次拿取糖果时能够获得甜蜜值,获得的甜蜜值为拿取前这个罐子中糖果的数量。 现给定两个整数 n 和 k,以及 n 个罐子中糖果的数量。已知乐乐初始的甜蜜值为 0,请计算按照规则他能够获得的最大甜蜜值。 例如:n = 3,k = 4,3 个罐子中糖果数量依次为 10,5,11,能够获得最大甜蜜值的拿取方式如下: 第一次拿取第 3 个罐子中的一颗糖果,获得的甜蜜值为 11,拿取后 3 个罐子中糖果数量依次为 10,5,10; 第二次拿取第 1 个罐子中的一颗糖果,获得的甜蜜值为 10,拿取后 3 个罐子中糖果数量依次为 9,5,10; 第三次拿取第 3 个罐子中的一颗糖果,获得的甜蜜值为 10,拿取后 3 个罐子中糖果数量依次为 9,5,9; 第四次拿取第 1 个罐子中的一颗糖果,获得的甜蜜值为 9,拿取后 3 个罐子中糖果数量依次为 8,5,9; 最终获得的最大甜蜜值为 40(11 + 10 + 10 + 9)。 输入描述: 第一行输入两个正整数 n,k(1≤n≤105,1≤k≤109),分别表示糖果屋中罐子的数量以及乐乐可以拿取糖果的次数; 第二行输入 n 个整数(1≤整数≤109),表示每个罐子中糖果的数量,整数之间以一个空格隔开。 数据保证,所有罐子的糖果总数大于 k。 输出描述: 输出一个正整数,表示乐乐能够获得的最大甜蜜值。 样例输入: 3 4 10 5 11 样例输出: 40

正确答案:参考程序(Python):n,k=map(int,input().split());import heapq;a=[-int(x) for x in input().split()];heapq.heapify(a);s=0;for _ in range(k):t=-heapq.heappop(a);s+=t;heapq.heappush(a,-(t-1));print(s)。样例→40。核心:优先队列每次取最大罐。

试卷来源:202412(第16届)蓝桥杯C++编程青少组(选拔赛_中高级)真题

本卷相关题目

在线做题 同科目题库