天天看点

优先队列

/*  priority_queue队列:

 调用头文件:

  #include<queue>

  using namespace std;

       详细用法(部分): 

  priority_queue<type> k;      ------      定义一个有序队列(默认从小到大排,其顶端元素为最大的那个)

  priority_queue<(队列中元素的数据类型), (用于储存和访问队列元素的底层容器的类型), (比较规则) > k      ------     (标准式)定义一个有序队列

  例如: priority_queue<int, vector<int>, greater<int> > k;(注意:比较规则后面必须要空上一格)

定义一个有序队列,排序规则为从大到小(其顶端元素为最小的那个)(greater为从小到大,顶端最小,less为从大到小,顶端最大)

  k.empty()      ------      查看是否为空范例,是的话返回1,不是返回0

  k.push(i)      ------      从已有元素后面增加元素i(队伍大小不预设)

  k.pop()      ------      清除位于顶端的元素(当然是排完序后,下同)

  k.top()      ------      显示顶端的元素

  k.size()      ------      输出现有元素的个数

*/

// http://www.jb51.net/article/41648.htm

/*问题概述: 有n个土堆,每个土堆都有一定重量,你每次可以将任意两个土堆合并成一个大土堆,并消耗同等于两个土堆总质量的体力,请问你至少需要多少

 体力才可以将所有土堆合成一个

  输入样例:                         对应输出:

 10 105

 8

 1 2 8 7 6 9 2 3

/*思路: 很显然,每次都将当前最轻的两个土堆合成一个大土堆即可*/

上一篇: 优先队列
下一篇: 优先队列