题解:蓝桥云课 545 谈判

【题目来源】

蓝桥云课:1.谈判 - 蓝桥云课 (lanqiao.cn)

【题目描述】

在很久很久以前,有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
posted @ 2026-03-04 10:54  团爸讲算法  阅读(0)  评论(0)    收藏  举报