13. 郭老师爱合并果子
创始人
2024-05-29 14:58:18
0

1 题目描述

郭老师爱合并果子

成绩20开启时间2021年10月8日 星期五 18:00
折扣0.8折扣时间2021年10月26日 星期二 00:00
允许迟交关闭时间2021年12月1日 星期三 00:00

郭老师家有个果园,每年到了秋收的时候都会收获很多不同种类的果子。他决定把所有的果子合成一堆,但由于体力有限,郭老师在每次合并的时候只能将两堆果子合并到一起。假设有 ​ 堆果子,那么经过 ​ 次合并即可完成任务,且消耗的总体力等于每次合并所消耗的体力之和。

因为郭老师还需要保留体力将果子运回家,所以在合并果子过程中要尽可能地节省体力。假定每个果子重量均为​,并且已知果子的种类数和每种果子的数目,你的任务是设计出合理的合并方案,使郭老师耗费的体力最少。

例如有​种果子,数目依次为​。合并方案如下:

  1. ​ 合并,得到新堆数目为​,耗费体力为​。

  1. 将新堆与第三堆合并,又得到新堆,数目为​,耗费的体力为​。

  1. 总共消耗体力为 ​,可以证明​为最小的体力耗费值。

输入格式

输入包括两行,第一行是一个整数 ​,表示果子的种类数。第二行包含 ​ 个整数,用空格分隔,第 ​ 个整数 ​是第 ​ 种果子的数目。

输出

输出包括一行,这一行只包含一个整数,即最小的体力耗费值。


 测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1以文本方式显示
  1. 3↵
  2. 1 2 9↵
以文本方式显示
  1. 15↵
1秒1024KB0

2 代码

//小根堆是一种特殊形式的完全二叉树,可以使用数组来存储
//注意其中很巧妙的下标2倍关系
//从1开始存,0号元素不使用,可以很好的利用上下标的2倍关系
#include
#includelong int* heap;
long int heapSize = 0;  //堆元素个数
long int sum = 0;void swap(long int* a, long int* b) {long int temp;temp = *a;*a = *b;*b = temp;
}//存入新数,从末尾存,然后排序
void put(long int num) {long now, next;heap[++heapSize] = num;  //初始值是0,使用前自增now = heapSize;while (now > 1) {next = now >> 1;  //位运算,相当于/2,速度更快if (heap[now] >= heap[next])   //符合结构,直接退出,其他地方都是有序的break;swap(&heap[now], &heap[next]);  //没有直接退出,说明需要交换now = next;}
}//弹出表头,只能从头操作,然后把最后一个数放到根的位置上,排序处理
long int pop() {long int now = 1, next, res = heap[1];heap[1] = heap[heapSize];heapSize--;while (now * 2 <= heapSize) {  //保证有左分支next = now * 2;if (next < heapSize && heap[next + 1] < heap[next])  //有右分支,而且右分支比左分支小next++;if (heap[now] <= heap[next])break;  //符合结构,直接退出swap(&heap[now], &heap[next]);  //没有直接退出,说明不符合结构,需要交换now = next;   //传递继续操作}return res; //弹出的数
}int main(int argc, char* argv[]) {//freopen("file in.txt","r",stdin);long int n;long int i;long int temp;scanf("%ld", &n);//根据输入的n的大小来申请空间heap = (long int*)malloc(sizeof(long int) * (n + 1));for (i = 1;i <= n;i++) {scanf("%ld", &heap[i]);put(heap[i]);}//只有一堆果子的情况if (n == 1) {printf("0\n");return 0;}while (n > 1) {temp = pop() + pop();  //这两个pop()可不一样哦sum += temp;put(temp);   //存进去,会自动处理成小根堆n--;}printf("%ld\n", sum);return 0;
}

相关内容

热门资讯

小学课文叶公好龙的意思是什么 小学课文叶公好龙的意思是什么叶公好龙是一句成语,讲述了叶公爱龙成癖,被天上的真龙知道后,便从天上下降...
完美世界前传图一图二图三的问题... 完美世界前传图一图二图三的问题?我是电二龙现的,101魔尊,图我都开完了,图一可进 千年前天泪之城图...
声开头的四字成语大全 声开头的四字成语大全声开头的四字成语大全 :声色俱厉、声如洪钟、声泪俱下、声情并茂、声东击西、声嘶力...
网络时代消费者心理特征和行为特... 网络时代消费者心理特征和行为特征是怎样的由于它能够提供丰富的商品信息,突破时空的限制,具有低廉的价格...
人生如梦,后面一句是什么 人生如梦,后面一句是什么人生如梦 一樽还酹江月人生如梦,需及时醒来,面对现实一樽还酹江月
求青梅竹马的小说 求青梅竹马的小说总是推的我都看过,多推点吧《夏有乔木,雅望天堂》感人死呢!!!!玄幻小说中有很多
想你第15集里面尹恩惠用的彩笔... 想你第15集里面尹恩惠用的彩笔是什么牌子的?这是马克笔 不管什么牌子效果都一样、和普通彩笔不同的就是...
焉栩嘉被痛斥劈腿背叛,情感失格... 焉栩嘉被痛斥劈腿背叛,情感失格的偶像算劣迹艺人吗?我认为情感失格的偶像应该就算是劣迹艺人人,因为他们...
求异界类似 {异界逍遥公}!和... 求异界类似 {异界逍遥公}!和幻神这样的! 或都市类的像 {龙啸九天-人界风云篇}!!主角蓝玉!我来...
我是从教师转行到财产保险公司做... 我是从教师转行到财产保险公司做保险营销员的,是个到公司快一年的新人,现在急求一份年终总结啊?manm...
改写人生是什么意思? 改写人生是什么意思?就是完全打破以往的人生规划,迎接一个不一样的人生。
找一本主角牙口特别好的小说? 找一本主角牙口特别好的小说?完美世界吗?
无双无对无法比打一数字? 无双无对无法比打一数字?无双无对无法比的数字是0。因为两个O仍是O。
一切都为了生活,那生活又为了什... 一切都为了生活,那生活又为了什么?生活就是你的一切,生活?生存活着!你的所有的努力只是为了活着,为了...
喜欢安静的人是什么性格 喜欢安静的人是什么性格喜欢安静的人通常本身也是比较文静的人,这类人的性格会属于内敛,内向型的。内向、...
哪个播放器能看《一生一世》 哪个播放器能看《一生一世》不好看,暴风影音就有哇如果有关视频的格式是播放器支持的都能看或播放
心里莫名的悸动是什么? 心里莫名的悸动是什么?心里老是莫名的悸动 搞不懂耶失眠、健忘、眩晕、耳鸣等并存,凡各种原因引起心脏搏...
怎样训犬 怎样训犬受训犬是指接受训练的犬。受训犬一般要求除符合本品种的特征外,还应注意:(1)体形外貌。机体各...
天为什么会黑? 天为什么会黑?这是因为地球自转造成的日月更替。地球绕太阳是公转,而在公转的同时地球也在自转。当地球自...
为什么前男友屏蔽朋友圈不让我看... 为什么前男友屏蔽朋友圈不让我看,但是又不删除我?为什么会这样啊都已经让对方变成前任啦!还纠结这些干嘛...