# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int整型 表示有n个数。 # @param c int整型 参数c # @param a int整型一维数组 ai表示第i个数的大小 # @return long长整型 # class Solution: def solve(self , n , c , a ): # write code here # 思路:每次取最小的两个数相加 if len(a) < 2: return 0 if len(a) == 2: return c*(sum(a)) import heapq # 初始化最小堆,a内部元素位置调整 heapq.heapify(a) res = [] # 每一轮取出最小的两个数相加,堆的长度-1,然后更新最小堆 while len(a) > 2: # 弹出堆顶,堆的长度-1,更新最小堆 a0 = heapq.heappop(a) # 记录这一轮求和的值 tmp = a0 + a[0] res.append(tmp) # 堆顶用求和值替换,更新最小堆 heapq.heapreplace(a, tmp) return c*(sum(res) + a[0] + a[1])