搜索
爱莉我老婆
Java萌新算法选手一枚,去过蓝桥国赛。励志补全Java版本的算法模板
展开
-
Atcode搜索
因为是bfs,所以简单的证明可以知道,如果一条路径到达一个已经到达过的点,且血量还小于等于visit时,那么即使完成了任务,其步数也不会时最优的。反之,如果到达一个点,其血量值可以更大,那么这就一种可能的路径,并不是重复到达。第一个问题就交由bfs来解决。因为之后我们要使得到达这个点的能量最大才可以走这个点,如果设置为0,假如到达终点的时候能量恰好为0,那么我们在终点的上一个点能量为1,就无法向终点走了,因为终点的0并不大于visted数组,所以visited设置为-1.原创 2024-04-07 16:43:09 · 399 阅读 · 0 评论 -
左孩子右兄弟
我们可以发现所谓左孩子右兄弟就是说把一个节点的所有孩子节点中选取一个作为左子节点,这个节点的剩余孩子节点依次链接在这个左孩子节点的右边,直到某个节点有孩子节点再把它挂在左边。这就是左孩子右兄弟。为了从让二叉树的高度最大,我们使得根节点1的带有最多孩子节点的某个孩子节点在最下部。而我们解答题目的关键就是计算根节点有几个孩子,根节点孩子的数量同时加上以这些孩子为根节点的子树的最大深度。以此一层一层类推进行递归处理。这个题讲解一下思路。原创 2023-11-07 21:21:41 · 172 阅读 · 0 评论 -
dfs之字符串拼接
总思路,首先按照首字符来在字符串数组中寻找以首字符开头的n个字符串,每一个走一编,最后从所有得到答案中选取最好的。原创 2023-09-24 10:18:48 · 89 阅读 · 0 评论 -
bfs提高系列之陨石下落
你想呀,假如说你在时间0时走到了1号地点,现在时间为1了,这时我们在启动流星下落,万一流星下落到1号位置,你不就被砸死了吗,所以我们要在走前先把下一步流行落下。我们在落完流星后,我们开始往四周试探,如果这个点没被走过或者流星砸过,我们把它入优先队列的同时,判断一下他是不是最后的那个安全点,是就输出时间顺便把标记answer改为0,不是就接着走.记住流星不能超过牧场边界,而人可以,所以贝萨在走时没给他限制小于300。首先我们输入每个流星下落的地点和时间,把调用方法把所有可能会被变成不可走的点标记上,原创 2023-09-21 20:10:36 · 53 阅读 · 0 评论 -
最优性减枝
举个例子,我们要从乳山走到青岛,你如果乘坐汽车去,结果出了青岛,这是否就是远离我们得到目的地了,这个时候我们就将这条路线舍去,因为它超出我们的目的地了,这就是无法抵达目的地的可达性减枝。另一种情况是,我们到青岛一号路线是走500公里,二号路线是700公里,如果你选择二号路线当走到501公里时,你就会发现不合适,因为已经超出一号路线的花费了。我们在搜索时常常会进行减枝操作,通常我们的减枝分为两种,一种是我们判断是否越界的可达性减枝,一种是能够抵达最终的答案,但是耗费的代价太过于高昂,我们将其进行最优性减枝。原创 2023-09-20 19:31:21 · 72 阅读 · 0 评论 -
暴力枚举之烤鸡
咳咳咳,虽然本题可以直接10层for循环暴力枚举,但那样太不优雅了,要优雅嘛。我们使用字符串来记录具体方案答案,开个ArrayList来记录答案数量。之前的dp系列太伤作者的心了,还是暴力系列最抚人心。本题要求先输出方案数量在输出具体方案。所以直接上dfs,dfs永远的神。具体看注释,代码和注释相结合。原创 2023-08-27 19:33:53 · 120 阅读 · 0 评论 -
动态规划入门之二维数组的动态规划(过河卒)
不过有鉴于我们的dp通常从1,1开始,所以我们默认将所有的位置都加上1,起点从(1,1)开始。顺便确定边界条件,我们直到起点为(1,1)那么我们从起点开始,假设终点就是(1,1)那肯定就只有一条路径。解决这个问题之后,我们大家来想怎么做,从起点怎么到达终点,一个好想的思路是我们使用深搜dfs从起点来出发不断搜索,遇到封锁点换到另一个路线,最终到达终点。只能向右走和向下走,所以任何一个点,如果它可以被走到(这个点不是被封锁的点),那么它一定是从其上方的点和其左边的点走到的,那么我们的状态转移方程也就有了。原创 2023-08-18 16:48:59 · 486 阅读 · 1 评论 -
dfs深度搜索入门之滑雪
首先我们可从任意一点开始滑行,这要求我们每一个点都进行一次深搜。但是如果每个点进行的话肯定会有许多个点重复被寻找最长滑雪长度,怎么办呢?这就轮到记忆化搜所了。我们每找到一个点就把这个点的最长化学长度保存起来。具体原理,我放在代码注释中。本题我们主要使用了深度搜索和记忆化搜所。原创 2023-08-17 10:44:10 · 148 阅读 · 0 评论