蒟蒻一开始循环每次都排序50分
然后蒟蒻在标签的提示下想到了优先队列
C++党有个福利:
我们有 STL !!!
STL里的优先队列 : priority_queue
定义:
priority_queueq;
从小到大:
priority_queue<int,vector,greater >q;
如果你想从大到小的话可以重载运算符:
struct Node{ int x,y; Node(int a=0, int b=0): x(a), y(b) {} };
struct cmp{ bool operator()(Node a, Node b){ if(a.x == b.x) return a.y>b.y; return a.x>b.x; } };
priority_queue<Node,vector,cmp>q;
或者你也可以用less
priority_queue<int,vector,less >q;
最后这就是道水题了:
#include<bits/stdc++.h> using namespace std; int n,x,ans; priority_queue<int,vector<int>,greater<int> >q; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>x,q.push(x); while(q.size()>=2){ int a=q.top(); q.pop(); int b=q.top(); q.pop(); ans+=a+b; q.push(a+b); } cout<<ans<<endl; return 0; }转载于:https://www.cnblogs.com/tbdemons/p/11298832.html
相关资源:JAVA上百实例源码以及开源项目