zoukankan      html  css  js  c++  java
  • 51nod1117【贪心】

    思路:哈夫曼树~~哇塞,那么有道理。

    利用堆维护:每次从堆里取两个最小加起来,然后还是最小的两个,最后只剩一根总的

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    priority_queue<LL, vector<LL>, greater<LL> >q; // 定义小的先出队
    int main()
    {
        while(!q.empty())
            q.pop();
        LL x,y,z;
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&x);
            q.push(x);
        }
        LL ans=0;
        while(q.size()>1)
        {
            x=q.top();q.pop();
            y=q.top();q.pop();
            z=x+y;
            q.push(z);
            ans=ans+z;
        }
        printf("%lld
    ",ans);
        return 0;
    }
    


  • 相关阅读:
    12.1
    我的火车头
    头文件优化时间
    一些姿势
    CodeForces
    CodeForces
    [SDOI 2015] 约数个数和
    BZOJ
    [国家集训队] middle
    鹅的问题
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777400.html
Copyright © 2011-2022 走看看