[LUOGU] 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包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于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 合并果子相关推荐
- 洛谷1090 合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 【洛谷1090】合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 合并果子(NOIP2004)
合并果子(NOIP2004) [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了 不同的堆.多多决定把所有的果子合成一堆.每一次合并,多多可以把两堆果子 合并到一起, ...
- SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)
树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...
- sdut 2127 树-堆结构练习——合并果子之哈夫曼树 优先队列
Problem Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的 ...
- PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子
文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...
- 树-堆结构练习——合并果子之哈夫曼树
树-堆结构练习--合并果子之哈夫曼树 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆 ...
- 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...
- SDNU 1171.合并果子(区间dp)
Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果 ...
最新文章
- LeetCode OJ:Remove Element(移除元素)
- javascript 内部函数的定义及调用
- HTML5(W3CSchool版).chm
- 他山之石:五个互联网英雄的创业启示!
- ubuntu设置始终亮屏_如何设置默认显示亮度?
- android studio替换jdk,Mac Android Studio JDK7 替换
- Git版本控制管理系统_企业实战上篇
- 史上最全的CSS hack方式一览(鉴)
- 每日一句(2014-9-11)
- 面试题 01.03. URL化
- C++语言类的详解和示例
- PHP自己实现var_dump函数
- 开发环境和运行环境_内网安全运行环境
- 电子招投标系统解决方案
- led灯光衰怎么解决_LED灯具怎么解决光衰问题?
- ASP英文转换成大小写函数LCase,UCase
- 【记录】深度学习之蒸馏法训练网络
- RAID重组——利用VMware和取证大师来重组
- hive-staging文件问题——DataX同步数据重复
- 函数指针的声明和使用
热门文章
- Codeforces Round #272 (Div. 2)
- 程序 算法与数据结构
- java图形用户界面添加背景颜色不成功的解决方案
- oracle 禁用外键
- QQ交流群,欢迎有兴趣的同学加入。
- Visual C++ 2010 使用心得 和帮助文档问题
- “阿一web标准学堂”选修课:EditPlus高级使用技巧(附视频、课件、代码下载)...
- 推荐 正则表达式入门教程
- CentOS7.3下Jenkins+docker自动化部署solo站点
- windows下编译及使用libevent