代码;
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> using namespace std; int main() { int N,fruitNum,power; while(scanf("%d",&N) != EOF && N != 0) { power = 0; priority_queue<int,vector<int>, greater<int> > MinHeap; for(int i =0;i < N;i++) { scanf("%d",&fruitNum); MinHeap.push(fruitNum); } while(MinHeap.size() > 1) { //合并两堆最少的 int a = MinHeap.top(); MinHeap.pop(); int b = MinHeap.top(); MinHeap.pop(); //消耗的能量 power += a + b; //合并成一个新堆 MinHeap.push(a + b); } printf("%d\n",power); } return 0; } /************************************************************** Problem: 1107 User: 小qixuan Language: C++ Result: Accepted Time:30 ms Memory:1520 kb ****************************************************************/