题目:

合并果子

题目解析

看注释

代码

#include <bits/stdc++.h>
using namespace std;

int main() {
	long long n, m, tot = 0, a, b;
	priority_queue<int, vector<int>, greater<int>> pq; // 本题用优先队列做
	cin >> n; // 输入 
	for (int i = 1; i <= n; i++) {
		cin >> m;
		pq.push(m); // 将每个过的重量插入pq中
	}
	int size = pq.size(); // 获取长度
	if (size == 1) { // 特判
		cout << pq.top() << endl;
		return 0;
	}
	while (size > 1) { // 重复循环直到仅有一个元素
		a = pq.top(); // 获取最轻的一个
		pq.pop(); // 出
		b = pq.top(); // 获取次轻的
		pq.pop(); // 出
		pq.push(a + b); // 将合并后的插回去并维护
		tot += a + b; // 获取重量
		size = pq.size(); // 更新长度
	}
	cout << tot << endl; // 输出总重量
	return 0;
}