题解:蓝桥云课 545 谈判
【题目来源】
【题目描述】
在很久很久以前,有n个部落居住在平原上,依次编号为1到n。第i个部落的人数为ti。
有一年发生了灾荒。年轻的政治家小蓝想要说服所有部落一同应对灾荒,他能通过谈判来说服部落进行联合。
每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)
【输入】
输入的第一行包含一个整数n,表示部落的数量。
第二行包含n个正整数,依次表示每个部落的人数。
其中,1≤n≤1000,1≤ti≤10^4。
【输出】
输出一个整数,表示最小花费。
【输入样例】
4
9 1 3 5
【输出样例】
31
【算法标签】
《蓝桥云课 545 谈判》 #2021# #贪心# #省模拟赛#
【代码详解】
import heapq
n = int(input())
a = list(map(int, input().split()))
#堆:每次获取最小元素、添加元素
#1、把a转换成堆
heapq.heapify(a)
ans = 0
while len(a)>=2:
#取出两个最小元素,合并即可
x = heapq.heappop(a)
y = heapq.heappop(a)
heapq.heappush(a, x+y)
ans += x + y
print(ans)
【运行结果】
4
9 1 3 5
31
浙公网安备 33010602011771号