- 博客(70)
- 问答 (1)
- 收藏
- 关注
原创 分考场/DFS结束递归条件的讨论/不同于N皇后的问题变体
首先明确一下这道题和N皇后有什么不同:在N皇后中,要求每一行放的是一个Q,因为在递归时是深层递归行数row,只要有一个位置可以放Q,直接递归进入下一行,而本题则完全不可同日而语,本题是要咣咣放完啊,排考场!!接下来针对DFS的模板,做一些讨论:大家都知道,在DFS模板中的结束递归条件是if start==终点,只要搜索的坐标也好,点也好,到了终点就结束递归,为什么?因为传统DFS模板压根不需要对起点和终点做任何的操作呀!所以搜索到终点就停,目的就达到了,而本题明显要将终点放入考场,所以本题的结束递归条件不同
2023-04-06 16:57:00
388
原创 异或数列/位运算/数位/二进制
知识点很多,依次总结:位运算:然后进行本题的分析:首先明确一点:对于X1,X2,X3来说,Alice先选择X1,Bob还可以继续选择X1!!为什么说只能选择一次呢?那是针对一个人来说的,即Alice选择了一次X1,不能再选了,当任意一个人选完了X数组的所有值,游戏结束 1.平局的情况:a^b=0即a^b^X1^X2^X3.....^Xn=0,根据交换率和结合律以及异或的定义,这些数都相等,故X1^X2^...=02.X1^X2^...!=0时,因为最优策略,A赢的意思是:A能采取某种策略,不管B作何应对,A
2023-04-05 15:57:34
511
原创 青蛙过河/前缀和/二分查找
然后这里还涉及到使用二分查找的原因呢,其实原因很简单,因为快,而且本题有个这样的特点,y行的话,y+1,y+2也行,y不行的话,比y小的数都不行,很适合二分查找。
2023-04-05 13:17:57
90
原创 包子凑数/动态规划/背包问题总结(0-1背包,完全背包)
也就是说它们都是某一个大于1的数的倍数,就会有无数个的数无法凑出,毕竟这样的 ai 所能构造出的数都是它们 gcd 的倍数。首先来系统回顾一下背包问题(0-1背包和完全背包最大不同就是遍历顺序)样例二的输入 3 2 4 6 其实已经给出了答案,如果。这种题型最为特殊,初始化dp[0]=1。这种题型最为特殊,初始化dp[0]=1。初始化dp[j]=math.inf,初始化dp[j]=math.inf。这里以先背包后物品举例。
2023-03-29 21:29:13
325
原创 修改数组/并查集
首先补充一下并查集的知识:并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作: 给出代码模板:首先解释一下模板中变量的含义,f[i]表示元素i的父节点,find(i)为查询函数,输出的是i的祖宗节点,即根节点1.父节点初始化: 即每个节点的父节点一开始就是她本身2.查询: 3.合并: 给个模板例题:好,那我们来看这个题,暴力梭哈是可以做的,可是严重超时,这种情况下,处理一些不相交集合的合并及查询问题,查并集算法能大
2023-03-29 19:44:07
219
原创 外卖店优先级/模拟(集大成!!!)
1.针对难点一,无非就是不知道怎么用一个数组来表示这么多变量,那我们可以用空间换时间,每个变量都用一个数组表示嘛,类似记忆化搜索和动态规划的思路,我们设立三个数组times[i]、prior[i]、flag[i]分别收集第i家外卖店接受订单的时间、优先级和是否为优先队列,只是数值是不断变化的,就像动态规划一样,那么times[i]就表示第i家外卖店上一次接受订单的时间。我们可以让优先级加的动态地加,减就一次性减嘛,那么这就涉及到times[i]与当前时间ts的差值了,而且在加减的过程中还要注意一些问题。
2023-03-28 20:13:37
275
原创 小朋友的崇拜圈/环状DFS/DFS模板里有回溯操作!!
题目如下班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。求满足条件的圈最大多少人?小朋友编号为1,2,3,…N输入第一行,一个整数N(3<N<100000)接下来一行N个整数,由空格分开。要求输出一个整数,表示满足条件的最大圈的人数。例如:输入:9则程序应该输出:4。
2023-03-28 19:57:17
196
原创 第几个幸运数字/暴力
填空题,上来就暴力,可以发现幸运数字都是由任意个3、任意个5和任意个7相乘得到的,故三个for循环求出,注意要剔除3**0、5**0与7**0相乘的情况。
2023-03-27 17:10:35
93
原创 子串分值和/贡献度/“子串分值”系列II
先回忆一下“子串分值”系列I的“子串分值”题目是怎么做的: 与这道题不同的是,本题字串可以存在同一个字母,但要考虑到贡献度时,也应注意!理解以下几点:(这个思路是对于“子串分值”和“子串分值和”都通用的公式,在这个题中所谓的“将来最近一次出现的位置”就是字符串长度的位置。原因:一个字符出现,随后再出现,这个随后再出现是对结果不做贡献的,所以出不出现无所谓,可以直接滑到最后。但如果要考虑这个字母给整个子串带来的贡献度,仍要保证当前位置之前不具有相同字母。因此那个“将来最近一次出现的位置”直接写字符串长度就可以
2023-03-25 21:24:01
516
原创 左孩子和右兄弟/二叉树的DFS/最大高度
2.结束递归条件:树类结束递归条件一般有两种,到达末端节点或结合具体题意,在本题中则是到达末端节点,即除了父节点没有其他节点,我们事先用tree[i][j]数组存储了1-N个节点的父节点和孩子节点的情况,故结束递归条件就是if len(tree[node])==1:return 0。1.参数:二叉树类的深搜输入参数一般为节点,即node,输出即为最大高度,期间涉及到最高的孩子树的高度,我们每进行一层搜索都设一个maxHeigh=0。
2023-03-25 19:17:02
119
原创 测试次数/动态规划
转移方程:首先,我们再来看一遍题目的问题:从每个厂家抽样3部手机参加测试,某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?什么叫最佳策略,什么又叫最坏运气下(这里最多是匹配最坏运气说的)?翻译一下就是:摔死了3部手机并且测试到最后一次才能测出耐摔指数所需要的最少测试次数。好了,那么我们下面要想办法找出这个最少的测试次数。这里我们可以设这个测试次数为k次,3部手机一共测试k次可以测出耐摔指数。
2023-03-25 16:33:55
142
原创 K倍区间/前缀和/求余数简化计算思维/字典统计次数
第一想法是暴力,两个for循环,把每个连续的段的和都枚举出来,然后对k取余,取余为0,结果加一。但是能过两个测试用例。假设数组s[i]是前i项的和,那么i到j项的和就是s[j]-s[i-1],这样可以优化一下求和部分,但还是只能通过两个用例。
2023-03-25 15:08:07
92
空空如也
新生成的aa矩阵不应该是2*6阶矩阵吗 那多余的0是怎么出现的?
2022-01-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人