优先队列,比较简单。注意使用值小的优先级高的优先队列,声明方式
priority_queue<int, vector<int>, greater<int> > q;
如果只加头文件queue,会报错greater不是模版,还需要加头文件functional。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset>
#include <cassert>
#include <cmath>
#include <functional> // 为了使用greater
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n;
while (cin >> n && n) {
priority_queue<int, vector<int>, greater<int> > q;
int x;
for (int i = 0; i < n; i++) {
cin >> x;
q.push(x);
}
int total = 0;
int first, second, sum;
for (int i = 0; i < n - 1; i++) {
first = q.top();
q.pop();
second = q.top();
q.pop();
sum = first + second;
total += sum;
q.push(sum);
}
cout << total << endl;
}
return 0;
}