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

【洛谷贪心算法】P1090合并果子

在这里插入图片描述

为了使消耗的体力最小,每次都应该选择当前重量最小的两堆果子进行合并。可以使用优先队列(小根堆)来实现这个过程,优先队列可以自动维护元素的顺序,每次取出堆顶的两个元素(即最小的两个元素)进行合并,然后将合并后的结果重新插入堆中,重复这个过程直到堆中只剩下一个元素。

【算法思路】

  1. 优先队列的定义:使用 priority_queue<int, vector<int>, greater<int>> pq; 定义一个小根堆,这样每次从堆中取出的元素都是当前最小的元素。
  2. 读入数据:通过循环读入每堆果子的重量,并将其加入优先队列。
  3. 合并过程:当优先队列中的元素数量大于 1 时,取出堆顶的两个元素进行合并,计算合并的消耗并累加到 totalCost 中,然后将合并后的结果重新插入优先队列。
  4. 输出结果:当优先队列中只剩下一个元素时,合并过程结束,输出 totalCost,即最小的体力消耗值。

【代码示例】

#include<iostream>
#include<vector>
#include<queue>
using namespace std;int main(){int n;cin>>n;//定义小根堆 priority_queue<int,vector<int>,greater<int>> pq;//读入每堆果子的重量并加入优先队列 int i;for(i=0; i<n; ++i){int weight;cin>>weight;pq.push(weight);}int totalCost = 0;//当堆中元素数量大于1时,继续合并while(pq.size() > 1){//取出最小的两堆果子int a = pq.top();//获取不移除pq.pop();//移除int b = pq.top();pq.pop();//计算合并这两堆果子的消耗int cost = a+b; totalCost += cost;//将合并后的果子堆加入优先队列 pq.push(cost);} //输出最小的体力消耗值 cout<<totalCost<<endl;return 0;
}
http://www.lryc.cn/news/544888.html

相关文章:

  • 【告别双日期面板!一招实现el-date-picker智能联动日期选择】
  • 现今大语言模型性能(准确率)比较
  • 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图(水文,勿三)
  • 在 UniApp 中实现中间凸起 TabBar 的完整指南
  • Redis大key
  • WPF高级 | WPF 与数据库交互:连接、查询与数据更新
  • CogBlobTool工具
  • C# WinForm程序中如何调试dll接口
  • 自然语言处理:词频-逆文档频率
  • 【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享
  • 基于大数据的民宿旅馆消费数据分析系统
  • Spring-AI搭建企业专属知识库 一
  • 极简本地体验deepseek大模型教程
  • RabbitMQ系列(五)基本概念之Queue
  • 【记录】成为创作者的第 730 天(两年)
  • 深度剖析数据分析职业成长阶梯
  • 【XSS】DVWA靶场XSS攻击
  • Fiddler在Windows下抓包Https
  • 04 路由表的IP分组传输过程
  • AI Agent 定义与核心要素详解
  • 记忆化搜索与动态规划:原理、实现与比较
  • 在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南
  • 计算机网络基础简答题资料(对口高考)
  • mysql内置工具导入csv包,简单便捷高效
  • 【汽车ECU电控数据管理篇】HEX文件格式解析篇章
  • SOLID Principle基础入门
  • keil主题(vscode风格)
  • 微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
  • 大模型使用
  • ISP 常见流程