题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过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包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于2^31。输入输出样例输入样例#1: 复制
3
1 2 9
输出样例#1: 复制
15
说明对于30%的数据,保证有n<=1000:对于50%的数据,保证有n<=5000;对于全部的数据,保证有n<=10000。

简单的堆的模板。

//Writer:GhostCai && His Yellow Duck#include<iostream>
#include<cstdio>
#define MAXN 2000
using namespace std;int heap[MAXN];
int size;
int n,ans;inline int read_d() {char c;int i=0;while(c=getchar(),c<'0'||c>'9');while(c<='9'&&c>='0'){i=i*10+c-'0';c=getchar();}return i;
}inline void put(int elm){heap[++size]=elm;int now=size;while(now>1){if(heap[now/2]<=heap[now]) break;swap(heap[now/2],heap[now]);now=now/2;}
}inline int get(){return heap[1];
}inline void pop(){heap[1]=heap[size--];int now=1,mn,next;while(now*2<=size){next=now*2;if(heap[next]>heap[next+1]) next++;
//      else mn=now*2+1;if(heap[now]<=heap[next]) break;swap(heap[now],heap[next]);now=next;}
}int main(){n=read_d();int i;for(i=1;i<=n;i++){put(read_d());}int ft1,ft2;while(size>1){ft1=get();pop();ft2=get();pop();ans+=ft1+ft2;put(ft1+ft2);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/ghostcai/p/9247533.html

[LUOGU] 1090 合并果子相关推荐

  1. 洛谷1090 合并果子

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  2. 【洛谷1090】合并果子

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  3. 合并果子(NOIP2004)

    合并果子(NOIP2004) [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了 不同的堆.多多决定把所有的果子合成一堆.每一次合并,多多可以把两堆果子 合并到一起, ...

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

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

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

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

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

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

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

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

  8. 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆

    描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...

  9. SDNU 1171.合并果子(区间dp)

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

最新文章

  1. LeetCode OJ:Remove Element(移除元素)
  2. javascript 内部函数的定义及调用
  3. HTML5(W3CSchool版).chm
  4. 他山之石:五个互联网英雄的创业启示!
  5. ubuntu设置始终亮屏_如何设置默认显示亮度?
  6. android studio替换jdk,Mac Android Studio JDK7 替换
  7. Git版本控制管理系统_企业实战上篇
  8. 史上最全的CSS hack方式一览(鉴)
  9. 每日一句(2014-9-11)
  10. 面试题 01.03. URL化
  11. C++语言类的详解和示例
  12. PHP自己实现var_dump函数
  13. 开发环境和运行环境_内网安全运行环境
  14. 电子招投标系统解决方案
  15. led灯光衰怎么解决_LED灯具怎么解决光衰问题?
  16. ASP英文转换成大小写函数LCase,UCase
  17. 【记录】深度学习之蒸馏法训练网络
  18. RAID重组——利用VMware和取证大师来重组
  19. hive-staging文件问题——DataX同步数据重复
  20. 函数指针的声明和使用

热门文章

  1. Codeforces Round #272 (Div. 2)
  2. 程序 算法与数据结构
  3. java图形用户界面添加背景颜色不成功的解决方案
  4. oracle 禁用外键
  5. QQ交流群,欢迎有兴趣的同学加入。
  6. Visual C++ 2010 使用心得 和帮助文档问题
  7. “阿一web标准学堂”选修课:EditPlus高级使用技巧(附视频、课件、代码下载)...
  8. 推荐 正则表达式入门教程
  9. CentOS7.3下Jenkins+docker自动化部署solo站点
  10. windows下编译及使用libevent