描述

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。
每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。
例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
格式

输入格式

输入包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。

输出格式

输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于2^31。

限制

每个测试点1s

来源

NOIp 2004

思路:

算是简单吧?类似哈夫曼树,每次寻找最小的两堆合并

写了两个版本,一个是优先队列的很短,还有就是手打堆

第一次写这么长的c++心中略j动。掌握好了语法知识,算法的核心思想都是差不多的了

源程序/c++:

/*
作者:olahiuj
题目:p1063 合并果子
*/
#include <stdio.h>
#include <queue>
using namespace std;
priority_queue<int>heap;
int main()
{int n,x,ans=0;scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&x),heap.push(-x);int a,b;for (int i=1;i<n;i++){a=-heap.top();heap.pop();b=-heap.top();heap.pop();heap.push(-a-b);ans+=a+b;}printf("%d\n",ans);return 0;
}
#include <stdio.h>
using namespace std;
int t[10000]={0};
int maxT=0;
int ans=0;
void swap(int &x,int &y)
{int tmp=x;x=y;y=tmp;
}
void insert(int x)
{maxT++;int v=maxT;while (v>1&&t[v/2]>x){t[v]=t[v/2];v/=2;}t[v]=x;
}
void fy(int x)
{int p;int l=x*2;int r=x*2+1;if (l<=maxT&&t[l]<t[x]) p=l;else p=x;if (r<=maxT&&t[r]<t[p]) p=r;if (x!=p){swap(t[x],t[p]);fy(p);}
}
int pop()
{int g=t[1];t[1]=t[maxT];maxT--;fy(1);return g;
}
int main()
{int n,x;scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&x);insert(x);}while (maxT>1){int x=pop();int y=pop();insert(x+y);ans+=x+y;}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/olahiuj/p/5781287.html

合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆相关推荐

  1. 【codevs1063NOIP04PJ】合并果子,贪心の钻石

    1063 合并果子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果 ...

  2. luoguP1090 合并果子 (贪心+优先队列)

    题目链接:https://www.luogu.org/problemnew/show/P1090 思路: 典型的贪心题,显然每次选择两个最小的堆合并最后耗费的体力最少,但每次合并之后都需要寻找最小的两 ...

  3. 合并果子(贪心,优先队列)

    我们有 STL !!! STL里的优先队列 : priority_queue 定义: priority_queue<int>q; 从小到大: priority_queue<int,v ...

  4. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

  5. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  6. 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子

    耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...

  7. SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)

    树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...

  8. sdut 2127 树-堆结构练习——合并果子之哈夫曼树 优先队列

    Problem Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的 ...

  9. 树-堆结构练习——合并果子之哈夫曼树

    树-堆结构练习--合并果子之哈夫曼树 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆 ...

最新文章

  1. mssql sqlserver 模拟for循环的写法
  2. 文献学习(part26)--Extended Comparisons of Best Subset Selection, Forward Stepwise Selection, and Lasso
  3. Jest 测试框架 beforeEach 的设计原理解析
  4. 继续聊WPF——动态数据模板
  5. 泽泽计算机科技,《计算机与信息技术》大学技能学习丛书.pdf
  6. vscode安卓html扩展,vscode扩展信息.html
  7. Atitit mysql 数据类型 5.7.9 目录 1.1. 数值类型 1 2. 字符串 2 3. 时间日期 2 4. 地理位置 2 5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)
  8. setuna截图怎么放大缩小_手机中的望远镜 华为P30pro是怎么做到50倍变焦?
  9. 读书笔记系列2:《More Effective C++》
  10. 天使投资,众筹与项目背书
  11. Topaz Plugins Bundle 2018 for Mac(PS插件滤镜特效包)
  12. 月薪过万的java程序员需要什么能力_什么样能力的Java程序员月薪过万
  13. 2021-04-30
  14. css之右上角带弧形的三角形标签文字45度倾斜显示
  15. Linux rescue
  16. oracle dbms_utility,dbms_utility的两个有用方法
  17. JS的报错处理(throw、try、catch)
  18. 【学习OpenCV4】OpenCV入门精讲(C++/Python双语教学)
  19. 计算机没有地址栏,打开我的电脑 没有地址栏 任务栏 标准按钮
  20. Facebook React完全解析

热门文章

  1. 【Linux】一步一步学Linux——free命令(80)
  2. 【Linux】一步一步学Linux——rev命令(57)
  3. 【C++】 C++标准模板库(六) Queue
  4. [Qt教程] 第43篇 进阶(三)对象树与拥有权
  5. 分布式理论、架构设计(自定义RPC)
  6. 从字节码层面分析==比较integer和int
  7. php两数相乘,php – 如何将数字相乘,直到达到一位数字并计算数字?
  8. 解决 iOS 12.4 Killed: 9 的问题
  9. 第五章 PX4-GPS解析
  10. HDU - 6625 three arrays (Trie+dfs)