手动用数组模拟一个哈夫曼树即可
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[20005];
int main() {
int n;
long long ans = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
while (n > 1) {
int mi1 = 0, mi2 = 1; // mi1最小, mi2第二小
if (a[mi1] > a[mi2])
swap(mi1, mi2);
for (int i = 2; i < n; i++) {
if (a[i] < a[mi1]) {
mi2 = mi1;
mi1 = i;
} else if (a[i] < a[mi2]) {
mi2 = i;
}
}
int t = a[mi1] + a[mi2];
ans += t;
a[mi1] = t;
a[mi2] = a[n - 1];
n--;
}
printf("%lld\n", ans);
}