#include <iostream> #include <queue> using namespace std; struct Element { int value; }; bool operator<(Element l, Element r) { return l.value > r.value; } int main() { int n; while (scanf("%d", &n) != EOF) { int sum = 0; priority_queue<Element> pqueue; for (int i = 0; i < n; i++) { int t; scanf("%d", &t); Element e; e.value = t; pqueue.push(e); }//完成小根堆的构建 while (1 < pqueue.size()) { int t1, t2; t1 = pqueue.top().value; pqueue.pop(); t2 = pqueue.top().value; pqueue.pop(); sum = sum + t1 + t2; Element e; e.value = t1 + t2; pqueue.push(e); } cout << sum << endl; } return 0; }