@[xmkxk](/user/897118) 看一下这个
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){ //典型的贪心,每一次都只合并所花力气最小的两堆果子!
int a[10000], n, sum = 0;
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
sort(a + 1, a + n + 1); //初始排序
for (;;){
int j = 1;
if (j == n)
break;
else{
a[j] += a[j + 1];
sum += a[j];
for (int i = j + 1; i < n; i++){ //将第一堆后面的前移一个位置,去掉最后一堆
a[i] = a[i + 1];
}
n--;
for (int i = j; i < n; i++){ //把果子堆重新再从小到大排序继续循环直至跳出!
if (a[i] > a[i + 1])
swap(a[i], a[i + 1]);
}
}
}
cout << sum << endl;
return 0;
}
```
by Kimi_0406 @ 2023-08-19 17:55:13
@[xmkxk](/user/897118) 你那个有点复杂
by Kimi_0406 @ 2023-08-19 17:55:59
@[KiMi_0406](https://www.luogu.com.cn/user/1067870)
@[xmkxk](https://www.luogu.com.cn/user/897118)
为何不用priority_queue?
by Rainbowgzh2012 @ 2023-08-24 16:14:02
STL大法
by Rainbowgzh2012 @ 2023-08-24 16:14:30
问题是取走堆顶后,判断 break 前要先判断 $son$ 要不要 ```++```
by xmkxk @ 2023-11-09 08:35:47