今天在大神的点拨下学习了优先级队列,可以说是非常开心了,ac代码如下,思路参考了《挑战程序设计》
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdio>
#define INF 9999999
using namespace std;
typedef long long ll;
int a[10000];
int main(){
std::ios::sync_with_stdio(false);
int n,temp;
ll ans = 0;
priority_queue<int, vector<int>, greater<int> > p;
cin>>n;
for(int i = 0; i < n; i++){
// scanf(" %d",&a[i]);
cin>>temp;
p.push(temp);
}
while(n > 1){
int min1 = p.top();
p.pop();
int min2 = p.top();
p.pop();
int t = min1 + min2;
ans += t;
p.push(t);
n--;
}
cout<<ans<<endl;
while(!p.empty()){
p.pop();
}
return 0;
}