当前位置: 首页 > news >正文

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

 

题目描述

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过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。

 

从这个问题可以深挖出神奇的哈夫曼树问题。

因为这题里合并的是二叉树,所以结点数量什么的都不用考虑。用堆维护数据,每次贪心取两个最小的合并即可(因为要使大数被累加的次数尽量少)

 

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<queue>
 8 #define LL long long
 9 using namespace std;
10 priority_queue <long long,vector<long long>,greater<long long> >q;
11 LL ans;
12 int n;
13 int main(){
14     scanf("%d",&n);
15     int i,j;
16     LL x;
17     for(i=1;i<=n;i++){
18         scanf("%lld",&x);
19         q.push(x);
20     }
21     for(i=1;i<n;i++){
22         LL tmp=q.top();q.pop();
23         tmp+=q.top();q.pop();
24         q.push(tmp);
25         ans+=tmp;
26     }
27     printf("%lld\n",ans);
28     return 0;
29 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/5991448.html

相关文章:

  • 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动
  • ECS Windows 系统蓝屏 (BSOD) 以及停止响应 (Hang) 的处理
  • MySQL字符串的‘123’转换为数字的123
  • 开发利器_Httpie.利用跨平台命令行下curl的替代品httpie调试接口?
  • public T void method(T var)
  • mfc 控件字体设置
  • JAX London:使用Java飞行记录器实现生产环境的性能分析
  • centos7 Docker 局域网私有仓库v2 nginx https 配置
  • svn版本库通过svn://127.0.0.1/不能导出的问题解决了!!
  • UbuntuLinux安装Mysql
  • Javassist(1)-helloworld-edu
  • 【LeetCode】13. Roman to Integer 罗马数字转整数
  • super and this
  • java观察者模式
  • iOS编译提示和导航提示
  • 2017前端实习生面试总结
  • Angular Elements 及其运作原理
  • ECS应用管理最佳实践
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript学习总结——原型
  • Shell编程
  • Vue组件定义
  • Zsh 开发指南(第十四篇 文件读写)
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 力扣(LeetCode)56
  • 聊聊sentinel的DegradeSlot
  • 每天一个设计模式之命令模式
  • 你真的知道 == 和 equals 的区别吗?
  • 为视图添加丝滑的水波纹
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​TypeScript都不会用,也敢说会前端?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (剑指Offer)面试题34:丑数
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)C#调用WebService 基础
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 指南:抽象化实现的基类
  • .netcore如何运行环境安装到Linux服务器
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Resource和@Autowired的区别
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [Android]创建TabBar
  • [Angularjs]ng-select和ng-options
  • [C#基础]说说lock到底锁谁?