题意:中文题面,不需要解释了。
思路:这是一种哈夫曼型贪心,用优先队列即可。
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 10010; priority_queue<int,vector<int>,greater<int> > q; int main(void){ int n; cin>>n; for(int i = 1; i <= n; i++){ int x; cin>>x; q.push(x); } int sum = 0; while(q.size()>1){ int a = q.top(); q.pop(); int b = q.top(); q.pop(); sum += a+b; q.push(a+b); } cout<<sum<<endl; return 0; }