优先队列——合并果子

【P1090 [NOIP 2004 提高组] 合并果子 】【洛谷】【优先队列】【stl】【c++】 阅读详情

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

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

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


#include <iostream>
#include <algorithm>

using namespace std;

#define MAXN 1000

int pq[MAXN+5];		//pq是两个优先队列共用的存储空间,新合并的果子放在pq的前端

int main(void)
{
	int n;
	while (cin >> n)
	{
		int i;
		for (i = 0; i < n; i++)
		{
			cin >> pq[i];
		}

		sort(pq, pq+n);	//将果子按重量排序,得到优先队列1
		
		int sum = 0;
		int f1 = 0, r1 = n, f2 = 0, r2 = 0;		//初始化两队列
		while (true)
		{
			//合并的新果子堆放在队列2中,所以当队列1为空且队列2只有一堆果子时结束合并
			if (f1 == r1 && f2+1 == r2)
			{
				break;
			}

			int s = 0;
			int j;
			for (j = 0; j < 2; j++)		//取两堆重量最小的果子
			{
				if (f1 != r1)			//队列1是否为空
				{
					if (f2 != r2)		//队列2是否为空
					{
						//选出两队列队首更小的一堆果子
						s += pq[f1] < pq[f2] ? pq[f1++] : pq[f2++];
					}
					else
					{
						s += pq[f1++];
					}
				}
				else
				{
					s += pq[f2++];
				}
			}

			sum += s;		//统计总数
			pq[r2++] = s;	//因为新合并出的果子堆的重量一定比之前的都大,所以,直接入队尾即可
		}
		cout << sum << endl;
	}
	return 0;
}


合并果子的编程代码 这个是编程的贪心算法简单运用,可以试着理解理解。。 立即下载

相关推荐

生信分析实战指南:Linux环境下EMBOSS的安装与核心功能详解

本文详细介绍了在Linux环境下安装和使用EMBOSS工具包的实战指南,涵盖源码编译、包管理器安装和Conda安装三种方法,并演示了序列比对、序列特征提取和引物设计等核心功能。EMBOSS作为生物信息学领域的开源工具集,适用于序列分析、蛋白质结构预测等多种任务,帮助研究人员高效完成生信分析工作。

weixin_29202213的博客 462

算法 - 优先队列的多向归并理解(合并有序数组)

索引优先队列归并 将多个有序的输入,归并成一个有序的输出 public class Multiway{ public static void merge(In[] streams){ int N = streams.length; IndexMinPQ<String> pq = new IndexMinPQ<String>(N); for(int i = 0;i< N;i++){ i..

japlus的博客 474

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1352

优先队列合并果子

队列那么先要包含头文件#include , 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容定义:priority_queue

初九·潜龙勿用的博客 1432

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8057

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4691

【堆】问题 C: 合并果子(堆)

例如有3种果子,数目依次为1,2,9。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为 12。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。本题要求把若干果子堆用最小的力气推成一堆,把每堆果子当作一个叶节点,而每次选两堆合并就是产生一个分支节点,到最后就形成了一棵哈夫曼树,这样题目所求其实是最小带权路径。

whatney的博客 540

【异常】Antigravity IDE 登录异常与网络连接错误排查指南

在使用 Google 推出的 AI 原生 IDE时,部分用户可能会遇到身份验证失效与网络环境冲突导致的叠加错误。本文将针对此类典型故障提供完整的解决思路。

奶爸的编程之路,也就一周冷个三天 1709

合并果子(贪心)

在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。 达达决定把所有的果子合成一堆。 每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。 可以看出,所有的果子经过n−1次合并之后,就只剩下一堆了。 达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。 假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力..

Jf_Forever的博客 1350

RK3588更新NPU驱动的方法

想要在 RK3588 上跑一下 deepseek 的大模型,发现目前的内核提供的 NPU 驱动比较低,无法支持新的大模型,所以需要更新一下我们的 NPU 驱动本次更新的NPU驱动仅适用于RK3588和RK3676系列。

荻夜的博客 2151

uniapp(全端兼容) - 最新详细实现pdf在线预览功能,uniapp内置预览PDF文件功能,uniapp在安卓app|苹果app|h5网页网站|微信小程序中打开pdf进行在线预览(详细示例源码)

uni-app,安卓Android,苹果ios,App端,H5网页,移动端网站,微信小程序,支付宝小程序,nvue,vue,pdf文档,pdf文件,office,uniapp 预览pdf,uniapp怎么做pdf预览,uniapp如何实现全平台兼容的pdf在线预览,uniapp怎么在h5打开pdf文档,实现PDF在线预览,H5移动端文件预览pdf,文件下载和预览,uniapp App端pdf文件预览,app移动端在线预览pdf文件,无法预览pdf怎么办,有没有预览pdf的插件,根本打不开咋办,uniapp使

✅ 精选推荐文章 1万+

优先队列【合并果子】

【题目】 题目描述: 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定已知每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体

weixin_45858843的博客 410

网红商品数据抓取:基于Python的高效爬虫实战

本篇博客介绍了从爬取到存储、分析和可视化网红商品数据的完整流程。通过Python的强大生态,我们能够轻松完成复杂的数据抓取任务。在实际应用中,还可以将此爬虫与机器学习模型结合,进一步挖掘数据价值。

2201_76125261的博客 1475

合并果子(经典优先队列)

合并果子(经典优先队列) https://www.luogu.com.cn/problem/P1090 题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量

远坂凛大小姐 2291

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

合并果子优先队列

STL优先队列应用

阿正的梦工坊 577

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【队列/优先队列】------【合并果子】

本题利用贪心思想,每次优先合并最小的两堆,实现最小总体合并代价。通过小顶堆结构快速实现贪心选择。该思路不仅适用于本题,还可以应用于类似的“最小代价合并”问题(如哈夫曼编码构造)。

2401_82676816的博客 840

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

合并果子(优先队列)

题目描述 在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。 达达决定把所有的果子合成一堆。 每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。 可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。 达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节...

邵光亮的博客 748

堆、优先队列--合并果子牛客

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量...

艾 411

合并果子 (优先队列) 贪心思想

合并果子 描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节...

麦琪家的小麦 1234

java合并果子_合并果子(经典优先队列)

合并果子(经典优先队列)https://www.luogu.com.cn/problem/P1090题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所...

weixin_27015375的博客 357

合并果子(贪心+优先队列)

C - 合并果子 Crawling in process...Crawling failedTime Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu SubmitStatus Description 现在有n堆果子,第i堆有ai个果子。现在要把这些果子合并成一堆,每次合并的代价是两堆果

2635

合并果子 (优先队列小根堆)

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n−1n−1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体

深海沧澜的博客 969

算法:合并果子(优先队列)

思路 每次将最小的两堆合并,然后将合并后的堆加入队列。循环往复n-1次就可以将n堆合并为一堆。 需要注意的是优先队列的语法 priority_queue<Type, Container, Functional> Type 为数据类型, Container 为容器类型, Functional就是比较的方式。 //升序队列 priority_queue <int,vector<int>,greater<int> > heap; //降序队列 priority_qu

weixin_46013817的博客 443

codevs 1063 合并果子//优先队列

1063 合并果子 2004年NOIP全国联赛普及组 时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 题目描述Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果...

aa48693100的博客 187

合并果子(优先队列, 贪心, NOIP)

接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12,耗费体力为 12。假定每个果子重量都为 1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。第二行包含 n 个整数,用空格分隔,第 i 个整数 ai(1≤ai≤2×10^4) 是第 i 种果子的数目。

2401_82832301的博客 870

合并果子(贪心,优先队列)

例如有3种果子,数目依次为1,2,9。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。第二行包含n个整数,用空格分隔,第i个整数ai(1

m0_53089164的博客 157
上一篇: 单调队列——Poj Sliding Window
下一篇: 单调队列——广告印刷
庞老板
博客等级 码龄15年 127粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值