蓝桥杯双周赛算法心得——通关(哈希+小根堆)

大家好,我是晴天学长,这是很重要的贪心思维题,哈希的存法和小根堆的表示很重要。


1) .通关

在这里插入图片描述


2) .算法思路

通关

用hash(int[])存点的子节点并按输入顺序存关卡的号码(输入顺序就是)
列如:key:父节点
难度 经验 关卡
优先队列存难度和节点

1.接受数据和初始经验。(用快读)。
2.判断第1关能过不。
3.把第1关的子节点放入队列
4.从队列中取出元素
5.挑战成功再把子元素丢入队列中
6.ans++;


3).算法步骤

1.从输入中读取关卡数量 n 和初始经验值 sum。
2.读取第一关的难度、关卡和经验值,并将其存储在map中。
3.如果初始经验值小于第一关的经验值要求,则输出0并返回。
4.增加初始经验值并增加答案计数器。
5.循环读取剩余的关卡信息,并将其存储在map中。
6.创建一个小顶堆(优先队列)queue,并将第一关的子节点放入小顶堆。
7.循环处理小顶堆中的关卡节点,直到小顶堆为空。
8.从小顶堆中取出一个关卡节点,比较当前经验值是否小于关卡节点的难度要求,如果是,则输出答案计数器并返回。
9.增加经验值并增加答案计数器。
10.如果当前关卡有子节点,则将子节点放入小顶堆。
11.输出最终的答案计数器。


4). 代码实例

package LanQiaoTest.大小堆;import java.util.*;//变种广搜
public class 通关_小顶堆 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Map<Integer, List<int[]>> map = new HashMap<>();//关卡int ans = 0;int n = scanner.nextInt();//经验值int sum = scanner.nextInt();//存第一关int temp = scanner.nextInt();int temp1 = scanner.nextInt();int temp2 = scanner.nextInt();map.put(temp, new ArrayList<>());map.get(temp).add(new int[]{0, temp1, temp2});int[] temp3 = map.get(temp).get(0);if (sum < temp3[2]) {System.out.println(ans);return;}sum += temp3[1];ans++;//存子节点了for (int i = 1; i < n; i++) {//父节点int a = scanner.nextInt();//挑战成功的经验值int b = scanner.nextInt();//难度int c = scanner.nextInt();if (!map.containsKey(a)) {map.put(a, new ArrayList<>());}//父节点        难度 关卡 经验值map.get(a).add(new int[]{c, i + 1, b});}//用优先队列(默认小根堆)PriorityQueue<Integer[]> queue = new PriorityQueue<>((a, b) -> (a[0] - b[0]));//把第一关的子节点丢入小根堆for (int i = 0; i < map.get(1).size(); i++) {int[] temp4 = map.get(1).get(i);//难度 关卡 经验值queue.offer(new Integer[]{temp4[0], temp4[1], temp4[2]});}// 开始闯关while (!queue.isEmpty()) {//难度 关卡 经验值Integer[] temp5 = queue.poll();//对比if (sum < temp5[0]) {System.out.println(ans);return;}sum += temp5[2];ans++;//把闯的关的子节点丢入小根堆if (map.containsKey(temp5[1])) {for (int i = 0; i < map.get(temp5[1]).size(); i++) {int[] temp6 = map.get(temp5[1]).get(i);queue.offer(new Integer[]{temp6[0], temp6[1], temp6[2]});}}}System.out.println(ans);scanner.close();}
}

4).总结

  • 小根堆的表示(在贪心题中经常使用)
  • 哈希表的正确使用。

试题链接:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/171655.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Pyro 和 PyTorch 的贝叶斯神经网络

一、说明 构建图像分类器已成为新的“hello world”。还记得当你第一次接触 Python 时&#xff0c;你的打印“hello world”感觉很神奇吗&#xff1f;几个月前&#xff0c;当我按照PyTorch 官方教程并为自己构建了一个运行良好的简单分类器时&#xff0c;我也有同样的感觉。 我…

JSON parse error: Cannot deserialize instance of `xxx` out of START_ARRAY token

报错原因 前端传参类型是数组&#xff0c;后端接收参数类型是字符串。 解决办法 前端传参类型改为字符串即可。 如下图 【修改前】 【修改后】

计算机网络-应用层(2)

一、DHCP 当需要跨越多个网段提供DHCP 服务时必须使用DHCP 中继代理&#xff0c; 就是在DHCP 客户和服务器之间转发DHCP 消息的主机或路由器。 DHCP 服务端使用UDP 的67号端口来监听和接收客户请求消息&#xff0c; 保留UDP 的68号端口用于接收来自DHCP 服务器的消息回复。 在…

HTTP 之 options预请求 nginx 解决跨域 postman调试跨域问题

一、HTTP一共有八种常见请求方法 get&#xff1a;参数在url上&#xff0c;浏览器长度有限制&#xff0c;不安全post&#xff1a;参数不可见&#xff0c;长度不受限制put&#xff1a;上传最新内容到指定位置delete&#xff1a;删除请求的url所表示的资源head&#xff1a;不返回…

代码随想录算法训练营第三十五天丨 贪心算法part06

738.单调递增的数字 思路 暴力解法 题意很简单&#xff0c;那么首先想的就是暴力解法了【超时】。 贪心算法 题目要求小于等于N的最大单调递增的整数&#xff0c;那么拿一个两位的数字来举例。 例如&#xff1a;98&#xff0c;一旦出现strNum[i - 1] > strNum[i]的情况…

高精度数字电容传感芯片-MDC04

高精度数字电容传感芯片-MDC04 简介引脚说明PCBA板寄存器说明代码实现单总线通讯时序代码单总线通讯时序代码头文件MDC04驱动代码MDC04驱动代码头文件用户APP调用函数main主程序 简介 MDC04以低成本等优势&#xff0c;可用于智能小家电液位、水箱液位、油液液位、水浸传感、食…

干式电抗器的尺寸和重量对系统有什么影响?

干式电抗器是一种用于电力系统中的无功补偿设备&#xff0c;其尺寸和重量对系统有以下几方面的影响&#xff0c;干式电抗器的尺寸和重量会影响设备的安装和布置&#xff0c;较大尺寸和重量的电抗器需要更大的安装空间&#xff0c;并且可能需要额外的支撑结构。在设计系统时需要…

代码随想录打卡第五十三天|309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目&#xff1a; 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖…

hdlbits系列verilog解答(32位加法器)-25

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个执行 16 位加法的模块 add16 。实例化其中两个以创建一个 32 位加法器。一个 add16 模块在接收到第一个加法器的进位结果后&#xff0c;计算加法结果的低 16 位&#xff0c;而第二个 add16 模块计…

windows + ubuntu + vscode开发环境配置安装

一、卸载WSL/WSL2 如果安装了windows子系统的朋友&#xff0c;可以选择继续使用。或者提前卸载WSL&#xff0c;再选择安装虚拟机。虚拟机占用内存较大&#xff0c;WSL可能对于开发的一些需求还有欠缺。根据自己的实际情况进行选择。 WIN10/11安装WSL(请参考官方资料&#xff0c…

CentOS 7.9.2009 数据盘挂载

一、linux版本&#xff1a; lsb_release -a 二、操作步骤 2.1&#xff0c;查看磁盘挂载情况&#xff0c;确认sdb是需挂载的硬盘 ## 查看磁盘挂载情况&#xff0c;确认sdb是需挂载的硬盘 lsblk 2.2&#xff0c;对硬盘sdb进行分区 ## 对硬盘sdb进行分区 fdisk /dev/sdb# 命令…

【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕

1.目标 在做饭、锻炼等无法腾出双手的场景中&#xff0c;想刷刷抖音 刷抖音的时候有太多的广告 如何解决痛点 抖音自动播放下一个视频 iOS系统高版本无法 越狱 安装插件 2.操作环境 MAC一台&#xff0c;安装 Xcode iPhone一台&#xff0c;16 系统以上最佳 3.流程 下载最…

Visual Studio Professional 2019 软件安装教程(附安装包下载)

Microsoft Visual Studio 是一个非常强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;适用于 Windows 上的 .NET 和 C 开发人员。它提供了一系列丰富的工具和功能&#xff0c;可以提升和增强软件开发的每个阶段。 Visual Studio IDE 是一个创意启动板&#xff0c;可…

配置Super-VLAN下的DHCP服务器示例

组网需求 如图1所示&#xff0c;某公司拥有两个部门&#xff0c;为了节省IP地址&#xff0c;部门A和部门B规划为同一网段&#xff1b;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。企业管理员为了方便统一管理&#xff0c;希望部门内终端通过DHCP服务器动…

17、简单记录一下两个流媒体工具和推流测试

基本思想:在开发流媒体服务过程中,使用了两个流媒体工具,这里做一下简单的记录,以后可以翻阅和查看 一:流媒体服务工具之一:https://github.com/bluenviron/mediamtx/releases 它支持rtsp/rtmp/hls推流测试 二、流媒体工具:Releases EasyDarwin/EasyDarwin GitHub 该…

激活函数作用以及 sigmoid和softmax

激活函数 激活函数在神经网络中起着非常重要的作用&#xff0c;它的主要功能是引入非线性性质&#xff0c;使得神经网络可以学习和表示更加复杂的模式和关系。下面是激活函数的几个主要作用&#xff1a; 引入非线性&#xff1a;激活函数通过引入非线性变换&#xff0c;打破了…

实用篇-认识微服务

一、服务架构演变 1. 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 单体架构的优点&#xff1a; 架构简单部署成本低 单体架构的缺点&#xff1a; 耦合度高 2. 分布式架构 分布式架构&#xff1a; 根据业务功能对系…

HTTP发起请求与收到响应的大致过程

可以《《透视 HTTP 协议》Windows 10 搭建最小实验环境》搭建环境&#xff0c;之后才能进行下边的操作。 1.鼠标左键点击两下www目录下的start.bat批处理文件。 2.打开Wireshark&#xff0c;然后选择Adapter for loopback traffic capture。 3.然后把tcp.port 80 || udp.…

【广州华锐互动】智能家居设计3D虚拟还原系统

随着科技的飞速发展&#xff0c;人们对家居生活的需求也在不断提高。智能家居作为一种新兴的生活方式&#xff0c;正逐渐成为现代人追求的理想居住环境。而智能家居设计3D虚拟还原系统&#xff0c;正是为了让人们更好地了解和体验智能家居带来的便捷与舒适&#xff0c;让未来生…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器&#xff1a; sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例&#xff0c;在服务器中&#xff0c;下载centos8的…