#include<iostream> #include<vector> #include<queue> using namespace std; int main() { int n; // 水果种类数 while (cin >> n) { if (n == 0) { break; // 输入为0时结束循环 } priority_queue<int, vector<int>, greater<int>> myQueue; // 创建一个小顶堆优先队列 for (int i = 0; i < n; i++) { int temp; cin >> temp; myQueue.push(temp); // 将每种水果的数目插入优先队列 } int ans = 0; // 存储最终的答案,即总的体力耗费值 while (myQueue.size() > 1) { // 当队列中还有两种及以上的水果时 int a = myQueue.top(); // 弹出队列中数目最少的水果 myQueue.pop(); int b = myQueue.top(); // 弹出队列中数目次少的水果 myQueue.pop(); ans += (a + b); // 将两种水果的数目之和累加到答案中,表示合并的体力耗费 myQueue.push(a + b); // 将新的水果(数目为原两种水果之和)插入队列 } cout << ans << endl; // 输出最终的体力耗费值 } return 0; }