【经典优先队列例题整理】
来源:互联网 发布:在线域名查询 编辑:程序博客网 时间:2024/05/14 07:42
———————————————————————————————————————————————
I
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu
Submit
Status
Description
我们的小伙伴Bingo真的很调皮,他在上课的路上看到树上有个鸟窝,他就想去把他捅下来,但是鸟窝很高他够不到,于是他就到处找木棍,想把这些木棍接在一起,然后去捅鸟窝。他一共找了N跟木棍 (1 ≤ N ≤ 20,000),每根木棍的长度为 Li (1 ≤ Li ≤ 50,000) 。现在他要把这N根木棍连接在一起,每次连接只能把两根木棍连在一起,而且每连接一次都需要花费一些money去买材料,买这些材料要用的money和要连接的两根木棍的长度之和相等(如:把长度分别为5和8的木棍连在一起,买材料就需要花13元)。Bingo想要花最少的钱来买材料。我们已经知道了他找到的木棍的长度,那么他最少要花多少钱来买材料呢??
Input
第一行为Bingo找到的木棍的数目N(N为整数),之后N行为每根木棍的长度。
Output
Bingo 所需要买材料的最少money
Sample Input
5
3
4
6
1
8
Sample Output
48
Hint
5
4
3
6
1
8
48
Bingo第一次要把长度为1和3的木棍接在一起,需要的monye为4;
第二次要把长度为4和4的木棍接在一起,需要的money为8;
第三次要把长度为6和8的木棍接在一起,需要的money为14;
第四次要把长度为8和14的木棍接在一起,需要的money为22;
所以总共需要4+8+14+22=48;
—————————————————————————————————————————————————
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG*/#include<cstdio>#include<cstring>#include<algorithm>#include<queue> using namespace std;const int MAX = 20000 +10 ;struct st{ long long a; friend bool operator < ( st x, st y ) //友元函数重载 { return x.a > y.a ; }}arr,ans;int main(){ int N; long long sa; scanf("%d",&N); if( N == 1 ) { scanf("%lld",&sa); printf("%lld\n",sa); return 0; } priority_queue<st>q; for( int i=0; i<N; i++ ) { scanf("%lld",&arr.a); q.push(arr); } long long a,b,sum=0; while( N >= 2 ) { ans.a=q.top().a; //调用的时候可以调用成员 q.pop(); ans.a+=q.top().a; q.pop(); q.push(ans); sum+=ans.a; N--; } printf("%lld\n",sum);}
——————————————————————————————————————————————————
一模一样的体,上面的代码不用改都能过。
LUOGO 1090
【问题描述】
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。
例如有3种果子,数目依次为1,2,9。可以先将 1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为 12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
【输入文件】
输入文件fruit.in包括两行,第一行是一个整数n(1 <= n <= 10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1 <= ai <= 20000)是第i种果子的数目。
【输出文件】
输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。
【样例输入】
3
1 2 9
【样例输出】
15
【数据规模】
对于30%的数据,保证有n <= 1000;
对于50%的数据,保证有n <= 5000;
对于全部的数据,保证有n <= 10000。
————————————————————————————————————————
- 【经典优先队列例题整理】
- 算法竞赛入门经典例题-优先队列(阿格斯)
- Poj—2431 Expedition 优先队列使用经典例题
- 优先队列例题
- 第三章 例题三 阿格斯(自定义优先队列)
- Uva136 Ugly Numbers 【优先队列】【例题5-7】
- Uva10603 Fill 【隐式图bfs(优先队列)】【例题7-8】
- 优先队列详解+ACM例题分析(转载)
- 例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
- 指南 第三章 例题3 UVALive 3135 Argus(优先队列的应用)
- 堆(优先队列,最大堆的基本操作,堆的例题)
- 经典排序算法2-堆排序及优先队列
- HDU3810 Magina(搜索+用优先队列模拟01背包)经典
- POJ3553 Task schedule (拓扑排序+优先队列)经典
- 经典算法题——第九题 优先队列
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
- HDU-5695-Gym Class【拓扑排序】【优先队列】【经典】
- Hrbust 2171 最佳工厂【贪心+优先队列】经典题型
- 考虑载波和采样频率的2PSK调制 MATLAB仿真
- 学位到底有多重要
- javascript——实现继承的6种方式
- 混合结构
- rsync命令的使用
- 【经典优先队列例题整理】
- 手机浏览器上下滚动翻页效果
- Android View中通过getViewTreeObserver().addOnGlobalLayoutListener()获取控件高、宽
- 新手Android学习笔记 06——自定义控件的单击事件
- [HDU 5755] Gambler Bo (高斯消元)
- 关注程序性能(1)jconsole
- Abandoned country(hdu5723)
- 2016多校训练Contest3:1001 1002 1003 1007 1010 1011
- Html-表单基础记录