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

洛谷 P1090 [NOIP 2004 提高组] 合并果子 题解

题目

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

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

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

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

输入格式

共两行。

第一行是一个整数 n ,表示果子的种类数。

第二行包含 n 个整数,第 i 个整数 a[i] 是第 i 种果子的数量。

输出格式

一个整数,也就是最小的体力耗费值。输入数据保证这个数在 int 范围内。

数据范围

对于 30% 的数据,保证有 n≤1000

对于 50% 的数据,保证有 n≤5000

对于全部的数据,保证有 n≤10000

思路概述

因为要求最小的体力耗费值,所以我们可以让每次的体力耗费尽可能小。因此考虑贪心做法。

最简单的办法是直接用一个数组存储每堆果子的数量,直接模拟合并的过程。时间复杂度 O(n*logn)

也可以用一个小根堆存,每次从堆顶取出两个数,把弹入小根堆,直到只剩一个数。虽说效率没优化,但可读性更强

如果有更优做法请勿喷。

代码

// 堆写法
#include <bits/stdc++.h>
using namespace std;
int n,a,b,ans;
priority_queue <int,vector<int>,greater<int> > q;
int main() {scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%d",&a);q.push(a);}while(q.size()>1) {a=q.top(); q.pop();b=q.top(); q.pop();ans+=a+b;q.push(a+b);}printf("%d\n",ans);return 0;
}
http://www.jsqmd.com/news/351548/

相关文章:

  • 计算机小程序毕设实战-基于springboot+Android的中老年人养老院健康一体化系统的设计与开发【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机小程序毕设实战-基于springboot+小程序的乡村政务平台app设计与实现设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【计算机毕业设计案例】(程序+文档+讲解+定制)
  • Python基于Vue的 课程案例平台的设计与实现django flask pycharm
  • 【课程设计/毕业设计】基于springboot+小程序的乡村政务平台app设计与实现设计与实现【附源码、数据库、万字文档】
  • Python基于Vue的面向推荐系统的求职软件研究与设计 django flask pycharm
  • Memcached set 命令详解
  • Python基于Vue的电商美妆数据分析与可视化 django flask pycharm
  • MVC HTML 帮助器
  • Python基于Vue的用户喜好电影推荐系统及其可视化分析 django flask pycharm
  • 计算机小程序毕设实战-基于springboot+Android的养宠交流系统的设计与开发宠物领养、社区互动与商城交易【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • MinIO将Apache Iceberg表直接集成到AIStor中
  • git: add+commit+push的bash脚本
  • 洛谷 P1510:精卫填海 ← 动态规划
  • 计算机小程序毕设实战-基于springboot+Android的井盖隐患智能识别小程序的设计与开发【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 新累土哲学:从直觉到形式化的跨越
  • 主权和智能体AI将定义中东数字化转型的下一阶段
  • 【课程设计/毕业设计】基于Android的养宠交流系统宠物领养宠物商城基于springboot+Android的养宠交流系统的设计与开发【附源码、数据库、万字文档】
  • java+vue基于springboot框架的美食商城网站设计与实现
  • 世毫九实验室(Shardy Lab)研究成果清单(2025版)
  • 现代汽车集团与沃达丰物联网在中东北非地区部署智能网联汽车
  • 20260206_221643_我,大专,月薪近3万,211领导看不惯我
  • 思科2026年AI峰会五大洞察及领导力的重要意义
  • 细胞电生理仿真软件:PyNN_(4).仿真环境设置
  • MySQL新手入门:吃透2个最常用的约束,少踩入门坑
  • Kubernetes 上的 Langflow 架构
  • 【课程设计/毕业设计】基于springboot+Android的井盖隐患智能识别小程序的设计与开发【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于springboot智慧医疗APP基于springboot+安卓的智慧医疗系统设计与实现【附源码、数据库、万字文档】
  • java+vue基于springboot框架的课堂考勤系统设计与实现
  • 软件测试--【自动化测试常用函数】(下) - 教程