贪心+双队列
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
#include <queue>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int arr[10010], tmp[10010];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int N;
cin >> N;
memset(arr, 127, sizeof(arr));//初始化为近似最大值
memset(tmp, 127, sizeof(tmp));
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
sort(arr, arr + N);
ll ans = 0;
int i = 0, j = 0, idx = 0;
for (int k = 0; k < N - 1; k++) {
int a = arr[i] <= tmp[j] ? arr[i++] : tmp[j++];//每次取果子时总是取最小的两个
int b = arr[i] <= tmp[j] ? arr[i++] : tmp[j++];//
ans += a + b;
tmp[idx++] = a + b;//将合并后的果子放在第二个队列上
}
cout << ans << endl;
return 0;
}