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

D4--哈夫曼树和不等式


看文先三连,养成好习惯~看文先三连,养成好习惯~看文先三连,养成好习惯~


目录

知识点:

堆排序:

优先队列:

定义:(默认大顶堆)

入队:

出队:

取队顶:

求长度:

是否为空:

堆的应用:

前缀编码:

带权路径和;

~题题题题~

哈夫曼树

题目描述

输入描述

输出描述

样例输入

样例输出

代码

supermarket

题目描述

输入描述

输出描述

样例输入

样例输出

代码

序列合并

题目描述

输入描述

输出描述

输入样例

输出描述

代码

合并果子

题目描述

输入描述

输出描述

样例输入

输出

提示

代码


这是最后一节贪心,下节课就要开启长达6666666节课的DP

知识点:

堆排序:

时间复杂度:O(nlogn)

优先队列:

优先队列是容器,大/小顶堆是内部实现方法

定义:(默认大顶堆)

priority_queue<int>Q;//int也可以换成string、double······

priority_queue<int,vector<int>,greater<int> >q;//两个尖括号之间要空格!!!否则编译错误!!!

入队:

Q.push(x);

出队:

Q.pop();

取队顶:

Q.top();

求长度:

Q.size();

是否为空:

Q.empty();

堆的应用:

前缀编码:

按出现频率构造二叉树,左0右1

频率高用短码,频率低用长码

带权路径和;

~题题题题~

哈夫曼树

题目描述

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

输入描述

输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。

输出描述

输出权值。

样例输入

2
2 8 
3
5 11 30 

样例输出

10
62

代码

#include<iostream>
#include<queue>
using namespace std;
int n,a[1005];
int h,sum;
int main(){while(cin>>n){priority_queue<int,vector<int>,greater<int> >q;h=0;sum=0;for(int i=1;i<=n;i++){cin>>a[i];q.push(a[i]);}while(q.size()>1){int x=q.top();//最小 q.pop();int y=q.top();//次小 q.pop();h=x+y;q.push(h);sum+=h;}cout<<sum<<"\n";}return 0;
} 

supermarket

题目描述

 超市里有N件商品,每个商品都有利润pi和过期时间di,每天只能卖一件商品, 卖掉一件物品要用 1 的时间 ,过期商品(即当天di<=0)不能再卖。求合理安排每天卖的商品的情况下,可以得到的最大收益是多少。 
0≤N≤100000
1≤pi,di≤10000  

输入描述

  每组数据一行,首先一个整数 n然后 n 对数 p_i,d_i,以文件终止符结束。  

输出描述

对每组数据,输出最佳收益。

样例输入

4 50 2 10 1 20 2 30 1
7 20 1 2 1 10 3 100 2 8 2 5 20 50 10

样例输出

80 
185

代码

#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int n,sum;
struct aaa{int p,d;
}a[100005];
bool cmp(aaa a,aaa b){//1不换,0换 return a.d<b.d;
}
int main(){while(cin>>n){sum=0;priority_queue<int,vector<int>,greater<int> >q;for(int i=1;i<=n;i++){cin>>a[i].p>>a[i].d;}sort(a+1,a+n+1,cmp);//按日期从小到大排 for(int i=1;i<=n;i++){q.push(a[i].p);//利润入小顶堆 if(a[i].d<q.size()){//出队最小值 q.pop();}}while(!q.empty()){sum+=q.top();q.pop();}cout<<sum<<"\n";} return 0;
}

序列合并

题目描述

有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个。

输入描述

第一行一个整数N(0≤N≤1050≤N≤10​5​​)

第二行N个整数Ai,满足Ai <= 1e9

第三行N个整数Bi,满足Bi <= 1e9

输出描述

输出仅一行,包含N个整数,从小到大输出这N个最小的和,相邻数字之间用空格隔开。

输入样例

3

2 6 6

1 4 8

输出描述

3 6 7

代码

#include<iostream>
#include<iomanip>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int n;
int a[100005],b[100005],ans[100005];
priority_queue<int>q;//大顶堆 
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){cin>>b[i];}sort(a+1,a+n+1);sort(b+1,b+n+1);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int x=a[i]+b[j];if(q.size()<n){q.push(x);}else{if(q.top()>x){q.push(x);q.pop();}else{break;}}}}for(int i=1;i<=n;i++){ans[i]=q.top();q.pop();}for(int i=n;i>=1;i--){cout<<ans[i]<<" ";}return 0;
} 

合并果子

题目描述

        在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。          因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。          例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。 

输入描述

        输入包括两行,第一行是一个整数n(1< =n< =10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1< =ai< =20000)是第i种果子的数目。 

输出描述

        输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于2^31。 

样例输入

3 
1 2 9 

输出

15

提示

对于30%的数据,保证有n< =1000:  对于50%的数据,保证有n< =5000;  对于全部的数据,保证有n< =10000。 

代码

#include<iostream>
#include<queue>
using namespace std;
int n,a[10005];
int h,sum;
int main(){while(cin>>n){priority_queue<int,vector<int>,greater<int> >q;h=0;sum=0;for(int i=1;i<=n;i++){cin>>a[i];q.push(a[i]);}while(q.size()>1){int x=q.top();//最小 q.pop();int y=q.top();//次小 q.pop();h=x+y;q.push(h);sum+=h;}cout<<sum<<"\n";}return 0;
} 

//跟第一题像到极致!!!!!!!!!!!


创作不易,点个关注吧~创作不易,点个关注吧~创作不易,点个关注吧~


相关文章:

D4--哈夫曼树和不等式

看文先三连&#xff0c;养成好习惯~看文先三连&#xff0c;养成好习惯~看文先三连&#xff0c;养成好习惯~ 目录 知识点&#xff1a; 堆排序&#xff1a; 优先队列&#xff1a; 定义&#xff1a;&#xff08;默认大顶堆&#xff09; 入队: 出队&#xff1a; 取队顶&…...

详解RabbitMQ三种队列类型

RabbitMQ 是一个强大的消息队列系统&#xff0c;它提供了多种队列类型以满足不同的使用需求。本文将探讨三种主要队列类型&#xff1a;经典队列、仲裁队列和流式队列&#xff0c;并讨论它们的区别和选型建议。 经典队列&#xff08;Classic Queues&#xff09; 简介&#xff…...

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;基于 openGauss 学习创建模式的相关知识。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.openGauss 的常用操作&#xff0c;2.SQL 创建模式相关语…...

森林火灾检测数据集(猫脸码客 第233期)

森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害&#xff0c;每年在全球范围内造成巨大损失。为了有效应对森林火灾&#xff0c;及早发现和快速响应是至关重要的。传统上&#xff0c;森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而&#xff0c;这些方法存…...

LeetCode100之找到字符串中所有字母异位词(438)--Java

1.问题描述 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...

【Python】Python自习课:第一个python程序

【Python】Python自习课&#xff1a;第一个python程序...

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块&#xff08;Patient Relationship Module&#xff09; 2. 病人识别模块&#xff08;Patient Identification Module&#xff09; 3. 病人统计模块&#xff08;Patient Demographic Module&#xff09; 4. 病人医学模块&#xff08;Pati…...

C++设计模式创建型模式———生成器模式

文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式&#xff0c;工厂模式的主要特点是生成对象。当对象较简单时&#xff0c;可以使用简单工厂模式或工厂模式&#xff1b;而当对象相对复杂时&#xff0c;则可以选择使用抽象工厂模式。 工…...

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

DDRNet模型创新实现人像分割

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...

try…catch…finally语句里return语句的执行顺序是怎样的?

第一种情况 try语句块里面有return语句&#xff0c;catch语句块和finally语句块里面没有return语句。 代码如下&#xff1a; public class Main {public static void main(String[] args) {System.out.println(test1());}public static int test1() {int i 10;try {System.o…...

AIGC与虚拟现实(VR)的结合与应用前景

公主请阅 引言1. AIGC与VR的基本概念1.1 AIGC简介1.2 VR技术概述 2. AIGC在VR中的应用2.1 生成虚拟环境2.2 自动生成内容2.3 互动体验 3. AIGC与VR结合的应用案例3.1 教育培训3.2 娱乐与游戏3.3 心理治疗3.4 虚拟旅游 4. AIGC与VR结合的挑战4.1 技术限制4.2 用户体验4.3 数据隐…...

如何在visual studio中 生成 并 使用dll和lib文件

因为工作需求&#xff0c;要写lib和dll给别人使用。 使用visual studio2022 以函数 int getmyset() { return 0;} 为例子 首先 点击打开 visual studio 文件->新建->项目 选择windows桌面向导 选择应用程序类型为动态链接库.dll 分别创建MyDLL.h和MyDLL.cpp文件&a…...

「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件

Slider 和 Progress 是鸿蒙系统中的常用 UI 组件。Slider 控制数值输入,如音量调节;Progress 显示任务的完成状态,如下载进度。本文通过代码示例展示如何使用这些组件,并涵盖 进度条类型介绍、节流优化、状态同步 和 定时器动态更新。 关键词 Slider 组件Progress 组件节流…...

Iceoryx2:高性能进程间通信框架(中间件)

文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例&#xff08;publisher.cpp&#xff09;3.2 订阅者示例&#xff08;subscriber.cpp&#xff09; 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言 Iceoryx2 是一个基于 Rust 实现的开…...

构 造 器

我们创建了一个对象&#xff0c;在其中定义了属性&#xff0c;new一个对象&#xff0c;然后设置对应的属性&#xff0c;但是我们可以在new对象的时候&#xff0c;同时传入我们要设置的属性&#xff0c;这个时候就需要构造器。 特点 构造方法是一个特殊的成员方法&#xff0c;…...

草莓叶片病害识别与分类数据集(猫脸码客 第234期)

草莓叶片病害识别与分类数据集 草莓作为一种重要的经济作物&#xff0c;在全球范围内广泛种植。然而&#xff0c;草莓生产过程中常常受到各种病害的困扰&#xff0c;其中叶片病害尤为严重。为了有效识别、检测和分类草莓叶片病害&#xff0c;构建一个高质量的数据集是至关重要…...

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式&#xff08;Circuit Breaker Pattern&#xff09;是云计算和微服务架构中的一种保护性设计模式&#xff0c;其目的是避免系统中的调用链出现故障时&#xff0c;导致系统瘫痪。通过断路器模式&#xff…...

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…...

lvgl 模拟器移植(V9)

1.模拟器代码下载 1.1&#xff1a;通过git 下载 github链接&#xff1a;GitHub - lvgl/lv_port_pc_visual_studio: Visual Studio projects for LVGL embedded graphics library. Recommended on Windows. Linux support with Wayland is work in progress.https://github.com…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...