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

P1090 合并果子(哈弗曼树)

题目描述

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

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1n-1n1 次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为 111 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有 333 种果子,数目依次为 111 , 222 , 999 。可以先将 111 、 222 堆合并,新堆数目为 333 ,耗费体力为 333 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 121212 ,耗费体力为 121212 。所以多多总共耗费体力 =3+12=15=3+12=15=3+12=15 。可以证明 151515 为最小的体力耗费值。

输入输出格式

输入格式:

共两行。
第一行是一个整数 n(1≤n≤10000)n(1\leq n\leq 10000)n(1n10000) ,表示果子的种类数。

第二行包含 nnn 个整数,用空格分隔,第 iii 个整数 ai(1≤ai≤20000)a_i(1\leq a_i\leq 20000)ai(1ai20000) 是第 iii 种果子的数目。

输出格式:

一个整数,也就是最小的体力耗费值。输入数据保证这个值小于 2312^{31}231 。

输入输出样例

输入样例#1: 复制
3 
1 2 9 
输出样例#1: 复制
15

说明

对于30%的数据,保证有n≤1000n \le 1000n1000:

对于50%的数据,保证有n≤5000n \le 5000n5000;

对于全部的数据,保证有n≤10000n \le 10000n10000。

代码:

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<cmath>

const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int a[maxn];
int main()
{
    int n;
    cin>>n;
    priority_queue<int,vector<int>,greater<int> >q;
    int x;
    for(int t=0;t<n;t++)
    {
        scanf("%d",&x);
        q.push(x); 
    }
    int sum=0;
    while(q.size()>1)
    {
        int a1=q.top();
        q.pop();
        int a2=q.top();
        q.pop();
        //cout<<a1+a2<<endl;
        sum+=(a1+a2);
        q.push(a1+a2);
    }
    cout<<sum<<endl;
    
} 

 

 

 

转载于:https://www.cnblogs.com/Staceyacm/p/11224708.html

相关文章:

  • 推荐阅读链接
  • MySQL 5.7 zip 安装
  • P1004 方格取数(四维动态规划)
  • SCRUM Day 8
  • 2.3_Database Interface ODBC组成原理
  • 石子合并(区间dp典型例题)
  • 石子合并2(环形求最优解 区间dp)
  • 恢复系统管理员密码的五大奇招
  • P1082 同余方程(拓展欧几里德)
  • Mac下eclipse安装SVN插件
  • 程序员真的很懒
  • 【Android应用开发】-(9)应用程序安装卸载原理
  • TCP/IP:网络因此互联
  • 公式输入较好的参考
  • K - Queries for Number of Palindromes(区间dp+容斥)
  • DOM的那些事
  • Javascript编码规范
  • Java知识点总结(JavaIO-打印流)
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • ReactNativeweexDeviceOne对比
  • SpiderData 2019年2月16日 DApp数据排行榜
  • text-decoration与color属性
  • 半理解系列--Promise的进化史
  • 对JS继承的一点思考
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 聊聊redis的数据结构的应用
  • 前端面试总结(at, md)
  • 算法-图和图算法
  • 我是如何设计 Upload 上传组件的
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​TypeScript都不会用,也敢说会前端?
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #include<初见C语言之指针(5)>
  • #Java第九次作业--输入输出流和文件操作
  • (Forward) Music Player: From UI Proposal to Code
  • (第二周)效能测试
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (多级缓存)缓存同步
  • (附源码)ssm码农论坛 毕业设计 231126
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (南京观海微电子)——I3C协议介绍
  • (七)Java对象在Hibernate持久化层的状态
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)OpenStack Hacker养成指南
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ******之网络***——物理***
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net Redis的秒杀Dome和异步执行
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证