合并果子(哈夫曼编码)

显然,用STL里面的单调队列做。

#include
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){//一定要判断q.size()>=2,而不是!q.empty()
        int a=q.top(); q.pop();
        int b=q.top(); q.pop();
        ans+=a+b;
        q.push(a+b);
    }
    cout<<ans<<endl;
    return 0;
}

你可能感兴趣的:(合并果子(哈夫曼编码))