P1090 合并果子

本题要用到堆

一个小根堆

每次取出两堆,合并成一堆,为了让多多花费体力最少,我们要尽量少的重复大堆的合并,因此每次合并完以后,要把新的一坨放到堆里排一排,维护一个堆

有必要强调一下这个合并的操作:

(1)取出最小的一个(或一坨)果子 x

(2)再取出最小的一个(或一坨)果子 y

(3)合并为一坨 x+y

(4)体力值自然要加上 x+y 了

(5)把 x+y 放到堆里维护一下这个堆,保证下次从堆中取出小的一个或一坨

【代码】:

#include<bits/stdc++.h>

using namespace std;

int n,guo,heap_size,ans=,ans1=,x,y;
int heap[]; void put(int d) //小根堆入堆
{
int now,next;
heap[++heap_size]=d;
now=heap_size;
while(now>)
{
next=now>>;
if(heap[now]>=heap[next]) break;
else swap(heap[now],heap[next]);
now=next;
}
}

int get() //小根堆出堆
{
int now,next,res;
res=heap[];
heap[]=heap[heap_size--];
now=;
while(now*<=heap_size)
{
next=now*;
if(next<heap_size&&heap[next+]<heap[next]) next++;
if(heap[now]>heap[next])
swap(heap[now],heap[next]);
now=next;
}
return res;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&guo);
put(guo);
} for(int i=;i<n ;i++) //每次把两堆果子合为一堆,一共需要合并n-1次
{
x=get(); //取出一堆小果子
y=get(); //再取出一堆小果子
ans+=x+y; //体力等于搬运这两个之和
put(x+y); //把这两个放进堆
} cout<<ans; return ;
}

堆排序 P1090 合并果子的更多相关文章

  1. 【洛谷P1090 合并果子】

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

  2. (贪心 优先队列)P1090合并果子 洛谷

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

  3. 洛谷 P1090合并果子【贪心】【优先队列】

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

  4. 洛谷P1090 合并果子

    合并果子 题目链接 这个只能用于结构体中 struct item { int val; friend bool operator < (item a,item b) { return a.val ...

  5. [NOIP2004] 提高组 洛谷P1090 合并果子

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

  6. 洛谷P1090 合并果子【贪心】

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

  7. 堆学习笔记(未完待续)(洛谷p1090合并果子)

    上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...

  8. P1090 合并果子(哈弗曼树)

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

  9. P1090 合并果子(JAVA语言)

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

随机推荐

  1. react_app 项目开发 (7)_难点集合

    /src/App/Admin/Header 布局 import {Row, Col} from "antd" <div className="header_box& ...

  2. JAVA访问控制修饰符

    1.public和private private修饰的成员变量和方法仅仅只能在本类中调用:  public修饰的成员变量和方法可以在任何地方调用. public修饰的内容是对外提供可以被调用的功能,需 ...

  3. String工具类2

    1:比较字符串 public static void main(String[] args) { // String去创建对象有多种方式 // 方式1 直接字面值赋值 String s = " ...

  4. 学习STM32单片机,从菜鸟到牛人就是这样简单(配视频资料)

    我想说,为了学习单片机而去学习单片机的思路不对. 你问,如何系统地入门学习stm32? 本身就是一个错误的问题.假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习. 你要考虑的 ...

  5. linux03:系统常用的命令

    1,蜗牛,硬件-内核-接口API(系统调用接口)-程序或者服务,用户不能直接和硬件对话,所以需要一个翻译器,这个翻译器就是shell.美国盾牌 2,shell是一个翻译官,bash是所有翻译官里面干的 ...

  6. hue,kylin,ambari

    apache-kylin https://ambari.apache.org/ https://www.jianshu.com/p/c49c61b654da docker pull sequencei ...

  7. 2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或E ...

  8. 【托业】【怪兽】TEST02

    ★ overturn v.推翻 ★ disciplinary adj.纪律的; 训练的; 惩罚的; ★disciplined 有纪律的 ★discipline v.纪律 ★outlook 态度 ★pe ...

  9. iOS 控制台po不出值

    本人这几天开发项目时在控制台用po命令打印时,发现总是打印不出来,这里将我的解决方案推荐给大家 方法一:(本人就是用该方法解决了问题的) 在控制台选择All Output 方法二: 按图中指示选择de ...

  10. 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周

    目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...