1369:合并果子(fruit)

合并果子

将所有果堆使用小根堆进行表示.

  1. 每次合并果堆中最小的两个果堆(即每次取小根堆的根节点).
  2. 将合并的结果再放入果堆.

执行上述两步直到只剩下一个果堆.

下面是用优先队列(其底层就是堆表示)ac的代码:

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;

int main(){
    std::ios::sync_with_stdio(false);
    int n,t;
    priority_queue<int,vector<int>,greater<int>> q;
    cin>>n;
    while(n--){
        cin>>t;
        q.push(t);
    }
    int ans=0;
    while(q.size()>1){
        int x=q.top();q.pop();
        int y=q.top();q.pop();
        ans+=x+y;
        q.push(x+y);
    }
    cout<<ans;
	return 0;
}
posted @ 2021-09-20 15:54  Rekord  阅读(377)  评论(0编辑  收藏  举报