
算法题目
文章平均质量分 50
力扣等刷题的个人理解
九思Atopos
良禽择木而栖,贤臣择主而事。见机不早,悔之晚矣! 个人邮箱:[email protected] 欢迎联系。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
题目2619:蓝桥杯2021年第十二届国赛真题-二进制问题
题目分析:先求出一个dp数组,dp[i][j]表示前i位有j个1的情况总数,从最高位往最低位看,如果一个位是1,那么这一位上可以选择1或者是0,如果是0的话,那么这个位不能选。如果是1,选择0的话,那么ans+dp[i-1][k-last],k是总数,last是已经选过的1,可以发现此时算的方案是在前面last位都选1,而本位选0.选择1的话,那么last++,不做其他。题目大意: 求1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。原创 2023-04-24 09:05:39 · 328 阅读 · 1 评论 -
E. There Should Be a Lot of Maximums
解题思路:如果这个树上面的最大值出现了3次或者3次以上,则不管删掉哪条边,最后的最大值都是这个最大值,如果出现1次或者0次,则说明没有产生最大值。这个奇特的方法就是,假设两个点为A和B,记A->B为正向,沿着正向路径走一遍,走到头之后搜索不在路径上的树的节点,找最大值。注意这个过程中,是在搜索断开的树的右边。逆向走的时候是在搜断开的树的左边。题目大意:给定一棵树,树上有若干节点,每个节点里面有一个数字,现在树上给出了n-1条边,每次删去一条边,问产生的两棵树当中至少出现两次的点的最大值。原创 2023-04-07 16:16:49 · 179 阅读 · 0 评论 -
dfs与逆序对结合(概率向)+树的直径的应用
在每一个取值k下(1原创 2023-04-06 22:15:06 · 367 阅读 · 0 评论 -
字符串的C语言和C++
写在前面的话:刚才做了一会pta,翻了一下以前做的题,突然觉得,没有升学压力的时候真好。我之前不会用C++,用C写的,不但用了链表,而且比较函数也是自己写的,麻了。题目大意:给一堆字符串,统计他们出现的次数,然后按照字典序排序。原创 2023-04-06 19:20:46 · 271 阅读 · 0 评论 -
小数除法优化+状压新方法+模拟降维+希尔排序法dp
即使想要保研,也不要以绩点为导向,重要的是让自己学到东西,知行合一才是正道。:只需要维护一个pass数组,记录上次接单的时刻,然后如果下次再接到这家店的单,就用时间计算。:一个游戏房可以由若干玩家申请,玩家有一个积分值,系统会正好将积分值相差k的玩家匹配在一起进行对局。每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减 到 0;由于a和b的数量级在1e9上,因此在模拟除法的时候会超时,不妨这样模拟:每一次给他乘1e10,然后进行模拟。注意,这里由于需要去重,所以需要统计每个元素的数量。原创 2023-04-05 21:20:43 · 328 阅读 · 0 评论 -
砝码称重(先加后减--dp顺序)
砝码有若干个重量,现在要用这些砝码进行称重,注意可以进行这样的称重过程:一边放2kg的砝码,另一边放3kg的砝码,从而称出1kg的重量。所以用01背包的想法:首先把每个物品放进背包一次,然后再用减法,把每个物品从包里拿出来。原创 2023-03-31 20:24:29 · 466 阅读 · 0 评论 -
拓扑排序新编
这里面还需要注意,由于是双向边,所以入度减为0之后还可能被减1,所以要加判断。具体数据用这个试一下就明白了。的培养时间进行更新。如果其中有一个种子入度不是0,那么其培育时间就不是最优的。.这一句话很重要,我们知道在拓扑排序当中,栈当中的种子必须入度都是0.则在。我的思路就是用拓扑排序,但是这个题有一点诡异,就是。的种子长成植物也需要一定时间。:给定一些作物的杂交关系,比如说。的入度都必须是0,才能继续对。种子的培育时间最大值和。条表达式中杂交的对象,原创 2023-03-31 18:02:37 · 212 阅读 · 0 评论 -
dp+思维(字符的贡献)
处理所有字母(只有小写字母)的出现位置,那么这一个字母可以对。求一个字符串的所有子串中只出现一次的字符数量。的子串做出贡献,为了让这一段包含这个字母,可以构造。个字符(从右向左,从0开始)在前面一个字符为。下的最小字典序字符串。,需要求在冒泡排序次数等于。这个时候就可以上动态规划了。更新过于麻烦,因此改为从。代码好像被我删了giao。来计算所有子串的个数。的情况下能达到总和为。个字符在前一个字符为。原创 2023-03-29 10:53:42 · 206 阅读 · 0 评论 -
利用dp进行线性公式推导
爬行一个高度花费一个时间1,问从0爬到高度。设置成从0高度到达i的时间就列不出来,不知道咋写。是必须要花费的时间,剩下的都是后续时间。现在有一个甲壳虫,它可以从树的。的概率从树上掉到0高度,则以。但是爬上去之后就会以。通过题意描述可以简单的写出。以此类推,就会发现,原创 2023-03-22 17:06:29 · 332 阅读 · 0 评论 -
区间更新+线段树
数组当中我们都已经记录下来了,所以只需要连边即可。这两个数可以称作一个对,对于每一个左边界,我们只需要知道他的右边界最近是哪,将这个信息存在。题目当中说的区间更新比较有歧义,其实一共有2种区间更新,一种是内区间更新,还有一种是外区间更新。文末彩蛋:我还想到另一种做法,就是用并查集+线段树。不满足(因为在线性基做不出来的时候,我直接想到可以维护一个。那么对于内区间更新一定是用线段树,那么外区间更新怎么做?时,我们自然就可以用线段树来判断这个区间内的。,这种就是内区间更新。,就应该知道先看都有哪些数异或和为。原创 2023-03-22 15:28:04 · 481 阅读 · 0 评论 -
线性基--类似线性代数
在做这个的时候我并没有十分关注线性基的求解方法,而是关注这个题目里要求的每个数只能选一次,我们注意到在线性基里面的p[i]很有可能是x^p[63] ^ p[61]的结果,如此反复,那么很有可能得到的结果是用集合中的某个数算了2次或者更多次的结果。这个题可以类比线性代数的基底,如果我们把一个数想象成基空间,那么每一位都是互不相关的基底,而现在考虑由1原创 2023-03-12 20:01:36 · 107 阅读 · 0 评论 -
0311记录
既然序列递增,把子序列的最后一个数看作第一个,让这个数除以1,那么序列的最后一个数应该除以序列长度,那么只要让从后往前找到的那个数大于序列长度即可,找的时候要贴着找,因为后面的数大。这个题的大意就是满足公式,并且数组满足递增的次序,且数组中的每一个数在[1,n]区间之内。这个题有点奇怪,他的大意就是给定一个数组,可以对数组中的任意一个数做+1操作,保证a(i+1)不被a(i)整除,但是总次数不能超过2*n。感觉这就是一个结论吧,就是随便加,因为题目里保证一定能得出来结果。原创 2023-03-11 23:01:59 · 153 阅读 · 0 评论 -
公式推导+dfs简版
给一个由0和1组成的两个字符串,对字符串a可以做以下操作:可以任选一个数字对其进行反转,问达到两个字符串第一次相等所需要的操作次数期望。中,则区间可能被连上,注意可能断点是由两个字母组成的。这样的话,考虑k最大可能为。,可以将这个位置记作一个断点,被断点隔开的若干个区间可以用这样的形式来表达。,其中len为区间内的字母数量。等,来枚举所有可能性。枚举出一种可能性,之后只要用。这个题可以这样想,对于任意一个。注意,由于我把集合中的字母用。映射,所以所有字母不能映射到。,如果这个字母已经在集合。原创 2023-03-11 09:26:24 · 454 阅读 · 0 评论 -
最小化最大值+拓扑排序要点+概率
我一开始的时候没有缩点做的,但是怎么都不对,如果有两个不连通的环,那么没法把入度为。的点放进去,后来又想,既然找不到就随便放进去一个点(反正有环),但是可能是一个连通分量含有一个环,如果随便放一个点,可能不是起始的,(那个环可能没有点指向。题是比较离谱的一道题,你在做的时候好像是dp,但是选择的情况太多了,其实对于每一个节点来说,除了叶节点之外,每一个节点的值为。不贡献,所以要看这个节点能活多长时间就看他有多高,只要足够高,僵尸就不容易吃掉它的脑子。类节点,其实看他有多高就是看他过了多少个。原创 2023-01-25 15:07:19 · 1221 阅读 · 0 评论 -
最近的题目记录
所以把三角形的其中一个边剪掉,然后把这个多出来的边连到树上,再从树上剪下来一个边放在三角形里。为啥这样是最优:从树里面拿出一条边给另一种颜色,树一定多个连通分量,但是另一种颜色未必会少一个连通分量。这个题是给一个图的所有边要么涂上红色,要么涂上蓝色,涂完颜色之后只看红色连边记录下图中的连通分量个数为。那么这个题应该从整体来看,比如说,应该先枚举出所有的排列。这个题是给一个排列做镜像然后问所有排列的逆序对总数是多少。思路,可以只让红色现在图里面连出来一个树,边的范围是在。,那么在镜像排列当中,就有。原创 2023-01-22 18:23:05 · 573 阅读 · 0 评论 -
数据结构---set篇
关于这个题,我一开始想从前向后贪心,但是这会涉及到一个问题,前面如果都放小的,那么到最后把大的放后面,可能无解。所以从后往前贪心呗。方法进行删除,第三次超时是我把查找元素改成了。远远不用,利用红黑树维护的话最大也是。,我又想起那段实现红黑树可怕的日子。不得不超时,第二次超时是我用。当中删除元素需要经过内存的。复杂度查找元素之后使用。,找到位置,,再旋转,原创 2023-01-20 17:58:53 · 1103 阅读 · 0 评论 -
记录一道题
今天没有参考文章了hh,我们来考虑一下,对于一个根节点的一系列子节点而言,可以对根节点进行动态规划,这个根节点最长的序列可以是子树的dp之和,也可以是最高的子树高度+1,我不太会证明。题意:有一堆心彼此连在一起形成一棵树(我最爱树了),然后现在只能从叶节点往下取数,并且取下来的这个数如果比根节点小,那么根节点就被替换成这个点。对于这个有n个节点的树来说,你可以任选一个从1到n的排列填到树里面。注意这里有一个限制条件,就是父节点的值小于子节点,所以可以逆序往上递推。这好像有点时差呢,俺明明是九点交的,嘤。原创 2023-01-19 21:18:28 · 102 阅读 · 0 评论 -
交换的最小次数
其实对于不在正确位置上的坏元素,最终都是要换掉的。可以这样想,现在把每个数组中的坏元素拿出来然后放在一起,有一个神秘人物暗中操作一下,所有数组中的元素就都是正确的了。)(也许吧,反正我一直是这么想的)来理解,的个数排序,然后首尾指两个指针,依次交换。这里要让超过平均值,和没有超过平均值的换。并且只要有一个换到平均值,就不用再换了。组成的数组,可以进行的操作为任意选择两个数组,并且两个数组中选择相同的位置进行交换,问最少交换多少次可以让所有数组中。毕竟最小就需要换这些,那只要这些能满足就是最优的了。原创 2023-01-17 19:50:37 · 693 阅读 · 0 评论 -
我用递归写单调栈(?)
一个理发师可以把一段数组给建成一个高度,他现在每个高度的剪子都有若干个。理发师最优的剪法就是先剪出来高的,然后在高的头发形成的段之间再剪次高的。直接上分治,结果超时,边界控制太难写了,省剪子啊,他的剪子都是一次性的,用完不能再用乐。的头发可以弹出数,但是不能入栈,入栈的目的就是不让两边相同高度的头发剪两次。:嗯,这个题上午有的思路,敲了一中午代码,改了一下午最后超时?还有就是这个题的数值太大了,本来想用离散化的,但是如果能用。的可以作为山丘的两端,高度低的不能穿过他。的时候不能穿过高度为。原创 2023-01-17 16:21:54 · 665 阅读 · 0 评论 -
D. Playoff
但是在暴力的时候就会发现不对,你可以直接判断出一个上下界,比如说,最后赢得只有一个人,然后从后往前推,如果是’1’说明应该至少有一个人比现在这个能力小,如果是‘0’说明至少有一个人比现在这个能力大。:找出在一个排列当中的,能获得锦标赛胜利的数值能力,会给出每场比赛的要求,其中’1’表示数值大的获胜,'0’表示数值小的获胜。这个题可以暴力建树熟悉一下题目,当熟悉完了之后就会发现暴力搜索的复杂度是。原创 2023-01-16 19:01:48 · 186 阅读 · 0 评论 -
新思路dp
由前所述,我想减去不满足条件的情况序列,然而一开始我想的不是枚举区间乘以两端,而是枚举左端点,看右端点最短能到哪,然后再减,减的时候其实是。我最开始想的是把一个区间内限制数为1的给合并起来当作一个数来处理,反正都是相同的而且相邻。)我想的是求出来总的然后减去不符合条件的。所以这个想法也是错的,在这种情况下:区间dp没法综合起子区间的情况。:嗯,今天做这个题的时候,想了一堆乱七八糟的解法,想记录一下。但是忽略了一个问题,这个有可能减的是重复的。之间相同的给减掉,两边的话直接就。时:该段字符串都是相同的。原创 2023-01-15 21:02:56 · 456 阅读 · 0 评论 -
位运算相关
这个样例其实是正确的,但是每次加入集合都有新元素,所以算法不对。实际上只要记录下来所有数的位的出现次数,然后再看是否存在一个数的所有位出现次数>1即可。现在要找出两个子序列,让他们的或运算的结果相等。.只有这样才是满足条件的,假设不是这样。这个题在二进制的角度来看就是假设。不同,并且不同的这一位(记为。代码仅供参考吧(超时的)离谱。这个题的大概意思:给。一定是从某一位开始与。原创 2023-01-14 18:17:50 · 389 阅读 · 0 评论 -
线段树+dp
嗯,俺用的方法是线段树,但是应该没有这么麻烦,好像逆序一下就行。我是这样的想的:考虑每一个元素向右可以产生的好区段。这个题的大意是输入一些样例,样例中的每一对数是关系不好的人的序号,现在在一个序列中要统计出所有好区段的数目。(好区段是这样定义的:在。这个闭区间里面不能有关系不好的人。向右延,最远能到哪呢?,而这个线段树维护的是最小值,如果有。(含)往左的所有人向右延,都不能到。还小,就起到了作用。原创 2023-01-14 17:12:16 · 327 阅读 · 0 评论 -
E. The Human Equation(前缀和与差分数组)
这个题我一开始想的是就用原数组做,构造出一个最长的正负交错的序列,比如现在栈里面如果有一个负数,那就应该在接收一个正数,如果再遇到一个负数就和栈里的负数比较,哪个小要哪个。求一个序列的前缀和数组,那么如果原来的数组全0就应该等价于前缀和数组全0.为啥要转换成前缀和数组?这样的序列一定会超时,如果考虑处理完栈中的元素对其清0,下次操作未必是最长的(未必最优)是在最大值为正数,最小值为负数的情况下成立的,为了把正数拉下来,把负数抬上去。)所以在前缀数组中+1,在差分数组中会自动弄出一个+1,-1。原创 2023-01-14 16:48:45 · 620 阅读 · 0 评论 -
唯一分解定理
嗯,这个题的思路是,还是用唯一分解定理,把一个数分出来一堆因子,然后用一个元素和他的因子连边,再用因子和数连边,因子为虚节点,不计入路径,最后用bfs,我一开始用的是dfs,其实bfs只要一碰到终点可以直接退出来。做题的时候我是这样想的:可以把每个质数想成是一个盒子,只要数组中的某个数能分解出这个质数,就往这个盒子里放一个球,如果一个盒子里的球数大于。其次是由我们上面的区间决定的,我们只需要。,说明有两个元素不互质,至少他们的公共因子是这个质数。的区间左边,那么一定会被判出来,所以我们上面的边界是正确的。原创 2023-01-13 20:25:22 · 594 阅读 · 0 评论 -
树上的DP
后记:勤把自己做过的题记录下来还是有好处的,至少在以后啥也不会的时候还能看看…我们需要的是求公共祖先(可以参考我曾经写过的。这样是不是就明白了?有人可能会问,那如果。来求,还记得我们在求公共祖先的时候,让。在一条链上,你还咋用?如果说,我们要对这样的一条链进行。到达同一个高度的代码吗?那我们这里就可以看成是让。原创 2023-01-11 16:36:20 · 324 阅读 · 0 评论 -
一道有意思的图论题
但是cf让我明白了一个道理,任何一道我写不出来的题代码不会超过50行,嘤(的确,太长的也不太好调试,这样的题显然不是模拟,要推出一些结论,然后往上整。今天写这道题的过程就一直在摆,主要是写不太出来,之前想到动态规划去了,然后又开始深搜,在出口那块放动态规划。的路径,然后把这条路径动规,但是这里面有一个问题就是,如果一开始的一条路径不能从。我的错误在于,我是深搜出一条从。的最小花费是多少,把消边的时间也要算上。之间的权重把这两条边断开,然后把。,后来我才明白,他一直在用。,为啥,我当时还在想是。原创 2023-01-04 20:31:43 · 632 阅读 · 0 评论 -
序列在滑动窗口下的(最大值+最小值)的最小值
得,再想,从前面那个题,我们就能想到,序列如果相邻元素的和是最优的(这个最优是全局的),那么一定是一大一小交错排列,并且打头的元素应该是最大的,在这里应该是。的最大的元素不就行了吗(如果当前是小的,不能找一个和他差不多小的,如果当前是大的,只能找小的)如果找不到还得额外加1分钟。这个题要构造一个全排列序列使得这个序列在一个滑动窗口滑动过程中窗口的(最大值+最小值)的最大值是最小的。就是说,有了前面那个题的经验,那我肯定直接就得出一个结论,最优序列的相邻元素的和是可以降到。踢出去),假设当前占内存的是。原创 2023-01-04 12:08:00 · 253 阅读 · 0 评论 -
群论的题目总结
而且这里有一个trick,就是你在计算最大公因数为4的时候得把公因数为8的给减下去,而且减的时候还不能用组合数,因为算8的时候还得把6的给减下去,只能初始用组合数算,然后后面的给减下去。之间,以为是一个离散化问题,于是我就大刀阔斧的开始了离散化的过程,然而事情并没有这么简单,比如。然后我就觉得如果数组中出现两个相等的数那就指定不行呗,他这个数据范围又是在。这个题大意是这样的,有一个数组,然后问你有没有一个。看这个数据你就会发现,如果不论你加的x是多少,总有。之后落在这个域里面,那么就能形成。原创 2023-01-04 11:50:07 · 421 阅读 · 0 评论 -
基环树的简单应用
就是现在有两个数组,然后让你再加一个数组,这三个数字让两个人去玩游戏,这个游戏是这样的:第i轮中,有一个第i个集合为{ai,bi,ci},第一个人从数组中移走一个数,然后第二个人从剩下的两个数里面选一个数,如果第二个人选出的所有数能组成一个排列,那么第一个人赢,你作为一个辅助,帮助第一个人赢,你能做的就是加入一个c,那么这样的话,我们来看,假设说第一个ai和bi里头有3和4两个数,如果你作为一个辅助加入了3那么第一个人移走4,第二个人是不是只能选3?最后把所有连通块乘在一起就可以了。原创 2023-01-03 11:52:18 · 102 阅读 · 0 评论 -
今天嫖来的两道题
这个题我还是想到的尺取法,这个题是可以尺取的,但是之后咋做我就又不知道了,只能提取出来一堆区间,如果能把这些区间用一种数据结构给组织起来的话就好了嘤,但是我不知道应该用啥数据结构给组织起来,于是额,我就去看了大佬的代码,发现他们是一种暴力的遍历,但是好像又不太暴力,纯暴力的解法就是扩大正方形边长,然后遍历那个正方形,那么这样的话,正方形边长的复杂度是。但是我看的代码是:每次都取邻近小正方形的值,然后每次取得正方形都扩大一点,拿第一个点来说,第一次是左的1。思路是这样的,他们的复杂度都是。原创 2023-01-01 19:40:04 · 300 阅读 · 0 评论 -
后缀数组1
找出所有以i为起始,以n-1为终止字符的后缀串,然后把他们用sa和rank和字典序同时控制排好,求最长公共子串的时候就是排名紧邻着的最长公共前缀,为啥?因为排名紧邻的一定是字典序最相近的,也最有可能产生最长公共子串,而排名这个过程,可以把它们变成O(nlgn)的复杂度。之前暴力搜都是O(n^{2}),最后求这个最长的前缀的时候,也可以把复杂度降成O(n),其实最坏的话是2*n。sa[rank[i]]=i,就是以一个学生从老师那问来了排名,再上教务去用自己的排名搜索自己的名字。sa和rank是互逆的,比如。原创 2022-12-14 21:28:27 · 273 阅读 · 0 评论 -
最小路径覆盖与最大匹配的关系
是不是就是出点只能连一个点,只能有一个点连入点,并且每一组连接都是越多越好的,简单证明的话,就是原先的点拆分之后可以看成是从入点到出点的一条路径,一共有。为顶点数目,每一次加一个匹配就相当于在路径集合上去掉一条路径,所以去掉的路径越多越好,这时其意义就变成了最大匹配。缩点之后得到的图)拆分成多条没有公共交点的路径的最小数目。最小路径覆盖是这样定义的:将一个有向无环图(如果将一个点拆成两个点来看的话,比如节点。而最小覆盖数就变成了顶点数目-最大匹配数。至于要输出路径上的所有点,还没想出来。原创 2022-12-09 21:17:44 · 198 阅读 · 0 评论 -
最大匹配与网络流的关系
如果将顶点与顶点之间的连接关系想象成点灯:假设左侧有3个点连接右侧2个点,这3个点能点亮右侧两个点,但是此时的最大匹配只能是2,同样的,如果左侧2个点连接右侧3个点,那么这3个点不都能被左侧点亮,而是最多有2个点被点亮。我们知道研究最大匹配的时候,可以用匈牙利算法,但是还可以使用网络流算法如。我们来看:现在假设已经有了一些点与点之间的匹配关系,如果有一个超级源点。连向二部图左侧的所有点,二部图上右侧的点全部连向超级汇点。所以用流是可以限制住最大匹配的。是不是就是最大匹配的数量。,那么如果所有边限流为。原创 2022-12-09 21:08:22 · 231 阅读 · 0 评论 -
弱鸡记录一道模拟题
真的在比赛的时候就有个怪圈,平时又是练习图论,又是练习数学,最后上场跟榜走的时候竟然只能从模拟这种题(就比较水的开始写起)偏偏还不太擅长做这种题,(平时都不练啊,就很奇怪。如果是线段树的话,说一下思路,线段树也是需要使用二维的线段树的,也就是使用二维数组,不能用两个一维数组组在一起,不然的话比如说更新同一段x的不同y值就会出问题。这道题之前做过,之前过的时候数据量没有这么大然后那次比较那啥,用的线段树过的,之后也没看题解,自己当时应该是做麻烦了,毕竟只是一道简单题hh。后记:这是VS2017的代码。原创 2022-12-02 19:31:28 · 869 阅读 · 0 评论 -
树上背包dp
这个题没啥难的,不过是这个转移方程不太好想,过于抽象了,之前一直不理解树上背包是啥,现在理解了,en…的时候,一定要注意先搜一下他的子节点,这里面由于已经缩点了,并且他就是一棵树,也不用设置。是背包剩余的重量,你用子节点向父节点更新的时候,相当于往里面加物品,得用总重量把。然后背包问题还有一个事情,额,就是这个怎么更新的问题,注意我们这里设置的。已经是新状态了,你不能再用这个新状态去更新旧状态了,相反而应该用旧的。这是不对的,因为我们更新的目的是用旧状态更新新的状态,在。《----------向左的。原创 2022-11-24 17:50:48 · 301 阅读 · 0 评论 -
编译原理--基本块的划分
一个练习,引自吉林大学PPT。基本块的划分原则有4条。原创 2022-11-23 20:33:54 · 2964 阅读 · 0 评论 -
一些洛谷题单里的题目
我们来看,我们考虑终止状态,这一堆人站在一起,国王一定要乘,那我就把所有人的左手数字全部都乘在一起(这是个定值),然后看最终结果,是不是就是这个定值除以最后那个人的左手数值,再除以右手的数值,让这个数最小,那就把最大的乘积放在后面不就行了吗》由于他只有4张卡片,所以可以设置一个四维数组,嗯,这是之前看别人题解想到的,还是得自己想出来才有意义啊,这已经是一个月之前的事了,这个题难点不在这,问题是我能想到这个,我咋A掉,就要实现高精度乘法,额,,还有高精度除法,额,还有高精度加法,还有高精度比大小。原创 2022-11-23 19:26:03 · 1089 阅读 · 0 评论 -
差分约束算法
那么这个时候如果可以想到图论算法的话就是,从x1,x2,x3…这些点连出一条指向xk的边,权值为m1,m2,m3,…正权环可以理解成x1可能比x2大一点,但也有可能小于x2,负权的时候是一定小于。注意由于有负权环,又需要检查负权环,所以使用Bellman-Ford算法即可。对于某个下标k而言,提取出关于其的所有不等式,(其中xk在第一个),也就是。xk取min(x1+m1,x2+m2,x3+m3,…但是上面那个怪圈是出现了循环小于的情况,所以无解。如果x1取1,那么x2可以取0,x3可以取-2。原创 2022-11-20 16:19:28 · 292 阅读 · 0 评论 -
利用生成函数降低背包问题复杂度
首先你可以把一个即将向背包里放的一个物品看成是一个多项式,然后呢,每次放一个物品,就把这个物品与前面的那些物品做一次卷积(就是多项式的系数相乘),然后就是找前面的那个系数,对于生成函数这些可以自行知乎(知乎讲的很好),其实多项式乘法这个就有很多东西可以优化,比如可以用FFT,再把多项式乘法的时间降低下来(这个不一定,看是不是做的朴素的多项式乘法了,)然后对于放k个物品这件事,可以用多项式的快速幂方法。把维数降低到O(lgn),我这只是记个笔记,如果真的想体会的话,可以来做这道题(绝知此事要躬行?原创 2022-11-18 19:43:56 · 365 阅读 · 0 评论