这里用到了STL里面的priority_queue,我也不是很精通基本上属于现学现卖阶段,http://www.cnblogs.com/flyoung2008/articles/2136485.html,这里挂一个我学习的地址
相当于一个堆,这里自定义了最小堆,这样之后每次取堆顶的两个元素就好,相加之后再插入堆
#include<iostream>
#include <queue>
#include<algorithm>
#include<cstring>
using namespace std;
int fruit[+];
struct node{ int m;
bool operator<(const node &a) const
{
return a.m<m;
} };
int main()
{
int n; while(cin>>n)
{
priority_queue<node>Q;
node p;
for(int i=;i<n;i++)
{
cin>>p.m;
Q.push(p);
}
int sum=;
node fir,sec;
node temp;
for(int i=;i<n-;i++)
{
fir=Q.top();
Q.pop();
sec=Q.top();
Q.pop();
sum+=fir.m+sec.m;
temp.m=fir.m+sec.m;
Q.push(temp);
}
while(!Q.empty())
{
Q.pop();
}
cout<<sum<<endl;
}
return ;
}