优先队列,每次选出来俩最短的棍子合成的棍子,肯定比别的方案合成的棍子要短,这样每次都找到最短的,结果就是耗费体力最小的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,l;
scanf("%d",&n);
priority_queue<int,vector<int>,greater<int>> que;
while(n--)
{
scanf("%d",&l);
que.push(l);
}
int a,b;
int res = 0;
while(que.size() != 1)
{
a = que.top();
que.pop();
b = que.top();
que.pop();
res += (a+b);
que.push(a+b);
}
printf("%d\n",res);
return 0;
}