优先队列
来源:互联网 发布:南方寝饰淘宝旗舰店 编辑:程序博客网 时间:2024/06/11 07:32
/* priority_queue队列: 调用头文件: #include<queue> using namespace std; (queue模板需要定义容器类型) 详细用法(部分): 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个土堆,每个土堆都有一定重量,你每次可以将任意两个土堆合并成一个大土堆,并消耗同等于两个土堆总质量的体力,请问你至少需要多少 体力才可以将所有土堆合成一个 输入样例: 对应输出: 10105 8 1 2 8 7 6 9 2 3*//*思路: 很显然,每次都将当前最轻的两个土堆合成一个大土堆即可*/#include<functional> /*功能库,内含greater<int>(仅限VS)*/#include<stdio.h>#include<queue>using namespace std;int main(void){int T, n, x, i, a, b;long long sum;scanf("%d", &T);while(T--){sum = 0;priority_queue<int, vector<int>, greater<int> > q; /*建立一个队列,其中队列顶端为最小值*/scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d", &x);q.push(x);}while(q.empty()==0){a = q.top(); /*弹出质量最小的两个土堆并合并*/q.pop();if(q.empty()==1) /*当然如果只剩下一个土堆了就结束*/break;b = q.top();q.pop();q.push(a+b); /*合并之后入队*/sum += a+b;}printf("%lld\n", sum);} return 0;}
0 0
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 优先队列
- 网络通信之TCP
- 分布式学习之一:事务
- JAVA实现SFTP上传,下载,删除等方法
- Spring 事务管理高级应用难点剖析
- 抽象类和接口的区别
- 优先队列
- spring 整合 redis
- 使用C实现模拟实现一个shell解释器(一)
- 基于matlab的车道和车道线检测样例
- webrtc的Sqrt()快速计算
- TCP的11种状态
- noi 1805 碎纸机-----搜索
- jq 获取表单未提交数据
- Java transient关键字使用小记