CSU 1588 合并果子(贪心 优先队列)

 

 

#include<cstdio>

#include<cstring>

#include<cmath>

#include<queue>

#include<iostream>

#include<algorithm>    //friend bool operator < (Node a,Node b){ return a.coun>b.coun; }  priority_queue<double> Q;

using namespace std;

struct node

{

    int num;

    friend bool operator <(node a,node b) {return a.num>b.num;}

};

int main()

{

    int t,n;

    int i,j,k;



    scanf("%d",&t);

    while(t--)

    {

        node now,now1;

        priority_queue<node> q;

        scanf("%d",&n);

        for(i=0;i<n;i++)

        {

            scanf("%d",&now.num);

            q.push(now);

        }

        /*while(!q.empty())

        {

             now=q.top();

            q.pop();

            printf("%d,.,.\n",now.num);

        }*/

        int ans=0;

        ans+=q.top().num;

        q.pop();

        ans+=q.top().num;

        q.pop();

        now.num=ans;

        q.push(now);

        //printf("%d...\n",ans);

        while(!q.empty())

        {

           now=q.top();

           q.pop();

           now1=q.top();

           q.pop();

          // printf("%d %d\n",now.num,now1.num);

           ans+=(now.num+now1.num);

           now.num+=now1.num;

           if(!q.empty())

           q.push(now);

        }

        printf("%d\n",ans);

    }

    return 0;

}

 

你可能感兴趣的:(优先队列)