如果想明白考察的是哈夫曼树。
那么用STL就比较简单了。
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <list>
#include <set>
#include <time.h>
#include <string.h>
#include <string>
#include <iostream>
#include <map>
#include <queue>
using namespace std;
int n;
__int64 sum=0;
class cmp{
public:
bool operator()(const __int64 &a, const __int64 &b) const{
return a>b;
}
};
priority_queue<__int64,vector<__int64>,cmp> que;
void process(){
if(n==1){
cout<<que.top()<<endl;
return;
}
__int64 t1,t2;
while(que.size()>1){
t1 = que.top();
que.pop();
t2 = que.top();
que.pop();
que.push(t1+t2);
sum += t1+t2;
}
cout<<sum<<endl;
}
int main(){
scanf("%d",&n);
int len;
for(int i=0;i<n;++i){
scanf("%d",&len);
que.push(len);
}
process();
//system("pause");
return 0;
}