洛谷P1090合并果子

第一次使用小根堆

#include//使用小根堆的库函数
#include
#include
#include
#include
using namespace std;
int n,ans=0;
priority_queue,greater > q;//建立一个小根堆
int main()
{
    int i,x,y,m;
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        scanf("%d",&m);
        q.push(m);//把每个数按顺序入队
    }
    while (q.size()>1)
    {
        x=q.top();q.pop();
        y=q.top();q.pop();//把队列里最小的两个记录后出队
        ans+=x+y;//迭加最后的答案
        q.push(x+y);//合并好的重新入队
    }
    printf("%d",ans);//输出结果
}



你可能感兴趣的:(洛谷)