算法笔记
爱莉我老婆
Java萌新算法选手一枚,去过蓝桥国赛。励志补全Java版本的算法模板
展开
-
最优性减枝
举个例子,我们要从乳山走到青岛,你如果乘坐汽车去,结果出了青岛,这是否就是远离我们得到目的地了,这个时候我们就将这条路线舍去,因为它超出我们的目的地了,这就是无法抵达目的地的可达性减枝。另一种情况是,我们到青岛一号路线是走500公里,二号路线是700公里,如果你选择二号路线当走到501公里时,你就会发现不合适,因为已经超出一号路线的花费了。我们在搜索时常常会进行减枝操作,通常我们的减枝分为两种,一种是我们判断是否越界的可达性减枝,一种是能够抵达最终的答案,但是耗费的代价太过于高昂,我们将其进行最优性减枝。原创 2023-09-20 19:31:21 · 72 阅读 · 0 评论 -
根堆系列之序列
我们以f【i】【j】放进小根堆里接着放入f[i+1][j]与f[i][j+1]依次类推,我们取出一个就这么干,最后前n个就是我们要求的。但是要注意,以f[1][2]与f[2][1]为例,他们皆是可以推到出f[2][2]的,所以我们加一个限制条件,使得f【1】【2】只能变为f【1】【3】类似这样的。我们输入序列,假设有三个待输入的序列,我们称之为1,2,3序列。我们可以发现接下来最小的数一定在f[i+1][j]he f[i][j+1]产生,由此推广,我们可以哦得知前两个序列任意两个数的和的前n小为。原创 2023-08-10 17:22:03 · 26 阅读 · 0 评论 -
根堆系列之超市
首先商品有日期限制,可能最大利润的商品的保质期最短,并且我们考虑卖商品时,保质期长的商品可以第一天卖也可以之后卖可以放后边来考虑,但保质期短的商品只能在前几天卖完。所以当商品的保质期n等于堆的大小时,这意味着我们在前n天已经安排卖的货,但是商品的保质期就到第n天,所以我们需要取出堆里最小的利润商品(也就是我们打算在第前n天卖掉的商品),跟新商品比较,如果小于,就加入新商品否则保留原商品。这里注意了我们依次扫描原来的商品的数组,如果商品的日期大于我们小根堆的存储的商品的数量我们将商品放入小根堆里。原创 2023-08-09 22:11:54 · 24 阅读 · 0 评论 -
trie树系列之最大异或对
那么任意两个数使得异或最大就明显了,就是尽量使得这两个数的二进制表示的每一位都尽量不同。我们把一个数表示成二进制整数,并且从左到右边依次把它存入字典树里。要注意的是,我们的数的范围很大,建议大家将一个数表示成32位的二进制整数,高位补0,这样我们将数字的二进制表示存入trie树后,我们取数,尽量走与它二进数相反的路径,(因为数字在路径上吗)如果这个相反的路径不存在,我们只好走二进制数相同的啦,最后取最大值。本题我们要从一堆数字中选取两个数,使得这两个数的异或最大。规则为相同为0不同为1。原创 2023-08-09 11:28:16 · 64 阅读 · 0 评论 -
trie树之前缀统计
trie树的模板题,主要写写给大家一个trie的板子,这里我们存入字符串后,只需要在查询时,我们。依次相加end数组,直到节点序号为0为止。原创 2023-08-08 21:01:39 · 20 阅读 · 0 评论 -
字符串hash系列之最长回文子串
我们枚举奇数回文子串的中心字符,对于偶数回文子串我们枚举最中心的两个字符里靠后的那一个,当然枚举最中心的两个字符里靠前的那一个也可以。左端点设为0.我们知道奇数回文子串,他的中心字符前面有m-1个字符,后面有n-m个字符,既然回文,当然中心字符前面的字符数量要等于后面的,所以我们要选取最小的。我们针对m位置二分mid,mid就是中心字符除外的中心字符往左的所有字符长度,所以左边是m-1到m-mid,右边同理m+1到m+mid。同奇数子串的步骤我们在m-mid到m-1和m到m+mid-1来求解。原创 2023-08-05 21:22:24 · 142 阅读 · 0 评论 -
深搜dfs之洛谷P1294 高手去散步
此题我们主要深搜游览的景点的顺序,把经过的路程累加起来,如果两个景点之间没有通路,我们就跳过它们。原创 2023-05-13 16:04:00 · 148 阅读 · 0 评论 -
深搜dfs系列之P1219 [USACO1.5]八皇后 Checker Challenge
本题的思路是这样的,我们开四个数组,一个一维数组来记录在第i行j列拜访了一个棋子,其他三个一维数组则用来表示第j列已经被占用,以及两条对角线被占用。原创 2023-05-12 21:47:05 · 93 阅读 · 0 评论 -
深搜dfs系列之洛谷P1123 取数游戏
这道题的难点在于如何深搜,一旦选择了一个数字,他周围一圈都无法选择 了。我们逆向思维每次选择一个数在选取数字的时候我们先对其四周进行遍历,看看它的四周是否有被标记的数字,如果有就不选择他,没有选取它,并使用标记数组将其标为已读true然后选择下一个数字重复上述过程。在选择数字时我们选择的顺序是先横着选择再竖着选择。原创 2023-05-12 16:02:23 · 186 阅读 · 0 评论 -
贪心算法洛谷P1007 独木桥
根据题意,最长撤离时间只可能出现在两个士兵碰撞后。两个士兵碰撞后并没有往相反方向跑,而是继续沿着原方向走,因为碰撞后往反方向走和沿着原方向走的走法是一样的。我们只要算出一位士兵离桥的哪一段最远,再再在所有士兵的撤离时间算最长的即可。由于士兵们初始的方向可以自己随意制定,所以我们使用贪心的思路来想一个士兵的位置离桥哪一段近,我们就让他初始面向哪一方向。这样可以获得单个士兵的撤离桥的最短时间,但是这还不够。撤离桥的最短时间要保证每一个人撤离,所以我们要在所有士兵的撤离桥的最短时间里选取最长的。原创 2023-05-09 16:02:59 · 208 阅读 · 1 评论