UVa 10954 - Add All(最优二叉树)

简单题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <queue>
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int main() {
int n, ans, k;
while(~scanf("%d", &n) && n) {
while(!q.empty()) q.pop();
ans = 0;
while(n--) scanf("%d", &k), q.push(k);
while(q.size() > 1) {
int a,b;
a = q.top(), q.pop(), b = q.top(), q.pop();
q.push(a + b);
ans += a + b;
}
printf("%d\n", ans);
}
return 0;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **