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

这篇具有很好参考价值的文章主要介绍了蓝桥杯双周赛算法心得——通关(哈希+小根堆)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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).总结

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

试题链接:文章来源地址https://www.toymoban.com/news/detail-718848.html

到了这里,关于蓝桥杯双周赛算法心得——通关(哈希+小根堆)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1014蓝桥算法双周赛,学习算法技巧,助力蓝桥杯

    家人们,我来免费给大家送福利了!!! 【1014蓝桥算法双周赛 】 蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心举办的全国性IT学科赛事。参赛高校超过1200余所,累计参赛人数超过40万人。该赛事连续两年被列入中国高等教育学会发布的“全国普

    2024年02月08日
    浏览(31)
  • 蓝桥杯 第一场算法双周赛题解(前五题)

    题目链接在此😁:第 1 场算法双周赛 - 蓝桥云课 为什么只有前5道题的题解呢?(懂的都懂~🤐) 考察:简单逻辑判断 问题描述 小蓝和小桥玩斗地主,小蓝只剩四张牌了,他想知道是否是“三带一”牌型。 所胃三带一”牌型,即四张手牌中,有三张牌一样,另外一张不与其

    2024年02月08日
    浏览(33)
  • 「蓝桥·算法双周赛」第一场公开赛【待补题填坑】

    给定四个字符,判断是否其中有三个相同,另一个与他们不同  二叉树性质问题,不了解二叉树也完全可以做。 要注意的是每次都从第一行的第一个点开始走,给一个字符串按照它走,输出最后的结果就行。 往左走坐标就变成了2*pos-1,往右就变成了2*pos 画个树理解一下就好

    2024年02月07日
    浏览(38)
  • 蓝桥杯1024第 2 场算法双周赛题解+Ac代码

    提醒:篇幅可能有点长,为了方便,大家可以直接看目录快速查找想要的内容 1.新生【算法赛】 - 蓝桥云课 (lanqiao.cn) input: output: 1.对于每一块地板,如果能被凑出来,那么一定是2*3地砖组合出来的,无论2*3地砖怎么放都为6的倍数,故长为n,宽为m的地板,n*m%6==0一定成立 2.这里

    2024年02月06日
    浏览(31)
  • 零基础!无门槛!高额现金奖励!优秀的大学生都在打这场算法双周赛

       spacespace     大家好,我是执梗。在蓝桥杯中获得过十三届 Java B 组国一以及十四届 C++ B 组的国一。今天主要为大家带来一个好消息,蓝桥杯将为各位喜爱算法的小伙伴带来全新的算法双周赛。如果你热爱算法竞赛,或者准备参加十五届的蓝桥杯比赛,那么一定不要错过

    2024年02月08日
    浏览(51)
  • [LeetCode周赛复盘] 第 111 场双周赛20230819

    T1 对向双指针。 T2 子序列/同向双指针。 T3 LIS/状态DP。 T4 数位DP。 2824. 统计和小于目标的下标对数目 1. 题目描述 2. 思路分析 类似两数之和,由于顺序无关,把数据排序。 设置l,r=0,n-1。 若a[l]+a[r]target,则a[l]+ 任意a[l+1…r]都target。则这r-l个数都可以和l组队。 3. 代码实现 2825

    2024年02月11日
    浏览(38)
  • [LeetCode周赛复盘] 第 102 场双周赛20230415

    T4卡了半小时,真的不应该。 T1 模拟。 T2 前缀和模拟。 T3 分层遍历。 T4 floyd/dij(我觉得dij不是正解)。 链接: 6333. 查询网格图中每一列的宽度 1. 题目描述 2. 思路分析 按题意模拟即可。 3. 代码实现 链接: 6334. 一个数组所有前缀的分数 1. 题目描述 2. 思路分析 不要被题目的一堆

    2023年04月16日
    浏览(35)
  • 力扣119双周赛

    模拟 贪心,一个变了下一个肯定不用变 滑动窗扣维持k个 二进制枚举+Floyd –

    2024年02月04日
    浏览(29)
  • 115 双周赛

    给你一个整数 n 和一个下标从 0 开始的字符串数组 words ,和一个下标从 0 开始的数组 groups ,两个数组长度都是 n 。 两个长度相等字符串的 汉明距离 定义为对应位置字符 不同 的数目。 你需要从下标 [0, 1, …, n - 1] 中选出一个 最长子序列 ,将这个子序列记作长度为 k 的 [

    2024年02月08日
    浏览(23)
  • 竞赛 双周赛

    分段 块定义为网格图中 2 x 2 的一个子矩阵。对于 左上角格子为 [x, y] 的块 ,其中 0 = x m - 1 且 0 = y n - 1 ,包含坐标为 [x, y] ,[x + 1, y] ,[x, y + 1] 和 [x + 1, y + 1] 的格子。 任意一个点 (x, y),包含它的块为 [x-1, y-1], [x-1, y], [x, y-1], [x, y],其中坐标不能越界。 BFS / DFS, 树状数组 方

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包