05 2021 档案
摘要:一、01背包问题 1.经典的01背包问题,采药 https://www.acwing.com/problem/content/425/ 注意背包问题一定要理解,而不是只会背代码。对于01背包问题,本来是用两维i和j来存状态集合。但是i是可以优化掉的。但是为什么在优化掉之前,j可以正向或者反向枚举,而
阅读全文
摘要:一、算法分析 基本算法是树上统计+贪心。笔者参赛时是不会做的,后来参考了洛谷too_late 的博客 的 https://www.luogu.com.cn/blog/115857/solution-cf1521d题解才码出这道题。下面简单地描述一下思路: 1.划分链的种类,可以将链划分为1号链和2号
阅读全文
摘要:一、算法分析 基本题意是给定一个数列,然后每次可以找两个数,将这两个数交换位置,再将两个里面较大的那个换成任意一个大于等于这两个数中较小者的数。或者将两个数中较大的那个变得更大。最终目标是相邻两个数互质。要求这样的操作次数少等于n次。这道题的一个关键信息是操作次数不需要求最小值。 构造方式:因为不一
阅读全文
摘要:一、算法分析 将星号聚拢到中间的那个星号上,可以使得总路程最短。每个星号的路程花费是其距离中间星号之间的点号个数。最开始自己想到的方法是前缀和维护,但是TLE了。 二、代码 前缀和维护(会TLE) 1 #include<iostream> 2 #include<cstring> 3 #include
阅读全文
摘要:一、算法分析 很经典的做法,把原来的$a_j-a_i=j-i$进行移项,变成$a_j-j=a_i-i$,从而生成一个新的数组$b_i=a_i-i$,对于新数组,只需要统计某个数$b_i$之前有多少个和其相等的数即可。 对于这种题目,要求就是要做得快,代码要一气呵成尽可能不要出错,要思考缜密。比如这道
阅读全文
摘要:一、写在前面 按说这就是一道典型的构造题。但是由于参赛经验不足,自己又去多想能否用枚举,甚至dfs等做法来做,而忽略了数据范围的问题,导致最后没有完成这道题。 二、算法分析 参赛时就想到了按奇数和偶数构造。因为要求差1,那么我们按照先填奇数再填偶数的策略来做,这样可以保证奇数的部分左右相邻至少差1,
阅读全文
摘要:一、题目大意 给n个点,m条边的图,所有边被摧毁,然后要建一棵树把点都连起来。第i个点有ai的材料,要连一条边需要x的材料,要修i点到j点的边,必须i点和j点总共有x的材料。在修好的边上可以运输材料。 问能否建出这棵树,要连哪些边,连边顺序是什么。 1.输出YES的条件是什么? 猜想,如果所有点权和
阅读全文
摘要:一、写在前面 昨天虽然没有很长的时间打比赛,只打了一个小时就去睡了。但是昨天的A题是自己做构造题的第一个突破,是自己第一次在赛场上用分析和一些解题技巧(如手动模拟样例),有条不紊地解决的一道题。 二、算法分析 首先想到将$x+y=z$写成$Ai+Aj=ABk$,这样可以约掉A.变成$i+j=Bk$,
阅读全文
摘要:1.构造题的训练 https://www.cnblogs.com/juruo-pigstd/p/14663958.html 2.代码起手式 https://www.luogu.com.cn/paste/omdbb0hc 3.区间dp(那么正文随笔区间dp就不总结了) https://www.luog
阅读全文
摘要:一、算法分析 给一个全0序列,每次可以将一个0变成1,若某个0的左右两边都是1,则这个0自动变成1.求有多少种操作可以使得这个序列变成全1序列。 据说是水题?n很小,两种做法。 1.DP分段做法: 参考的下面的做法 https://www.luogu.com.cn/blog/yuzhechuan/s
阅读全文
摘要:1.手写二分的两种写法 2.lower_bound()和upper_bound() 3.vector的下标问题,其下标从0开始,对于某个vector,其最大下标为其size()-1
阅读全文
摘要:一、写在前面 这道题目深刻地告诉了自己基础的重要性!!! 读完题目直接想到打表,然后因为是有序数组,所以直接想到二分。到这里按说这道题应该很好做,但是自己首先,忘了lower_bound和upper_bound的区别,然后去查区别,浪费了时间。然后又因为其它地方的错误,交上去WA了,自己又以为是二分
阅读全文
摘要:一、算法分析 如何分析这样的题目? 宏观来看,将两只袜子匹配的花费可能是0,1或2,经过分析,先把0花费匹配完之后,不会影响最终结果。那么我们的目标就是使花费2的尽可能地少。 花费0的匹配为:同色不同左右的匹配。 花费1的匹配为:①同色同左右的匹配;②异色不同左右的匹配。 花费2的匹配为:同色同左右
阅读全文
摘要:一、算法分析 刚开始容易想到dfs,但是考虑集合的个数是给定的,只需要往里面填数就行了。具体的填数策略是贪心。注意题目中的一个重要条件:每个块的高度都不会超过x。 题目要求任意两个集合的规模之差不能超过x,可以转化为只要最小的集合和最大的集合规模之差不超过x即可。用小根堆维护集合,每次把方块分配到最
阅读全文
摘要:一、算法分析 这道题当时自己没有做出来,因为自己的思路一开始就跑偏了,两个三角形或者四个三角形都能拼成一个小正方形,但是自己只考虑了小正方形是1*1,2*2,4*4,8*8...的大正方形。而事实上3*3,5*5,6*6...这些也都是正方形。只是样例里面没有提到,自己就没有想到,这是自己的一个大问
阅读全文
摘要:一、spfa判断负环 虫洞 https://www.acwing.com/problem/content/906/ 某个点更新大于等于n次则认为有负环 注意当判断负环时,以上的方式可能会超时,这时候可以考虑把队列换成栈。 二、0/1分数规划问题 观光奶牛 https://www.acwing.com
阅读全文
摘要:一、题目大意 给你n个点,每个点可以且必须进行一次位移(横向向右移动一个单位或者纵向向上移动一个单位),问位移之后有多少对点可以进行匹配(只要两个点和原点三点共线即可匹配),每个点只能匹配一次,问最大匹配数目和匹配方案。 样例1也强调了,每个点只能匹配一次,且可能有重合点,每个点也必须要移动。 二、
阅读全文
摘要:一、算法分析 给定两个序列 a和 b ,将 a中的一个子序列翻转后 ( 也可以不翻转 ) ,使得 a,b 对应项乘积和最大。当时首先想到的是类似区间DP的东西,然后不知道怎么回事脑子晕了觉得枚举能做,枚举确实能做,但是又把数据范围搞错了,误以为要开高精度才行,然后搞了半天没时间了。 首先是枚举做法,
阅读全文
摘要:一、算法分析 当时比赛做的时候有点急躁,就首先考虑了三种情况,分别是砝码总重恰好为x,大于x和小于x.显然只有总重恰好为x的时候才会必然爆炸,否则都可以通过一定的方式进行规避。然后考虑如何安排顺序进行规避,如果总重小于x则显然随便安排都不会炸。但是如果总重大于x则就要考虑怎么安排了,思路如下: 先排
阅读全文
摘要:一、两个基本算法的适用情况 kruskal算法比较常用,适合稀疏图(大多数题目的图都是稀疏图),其复杂度主要与边数m有关。而prim比较适合稠密图,因此常用邻接矩阵存图,复杂度主要与点数n有关。 最短网络 https://www.acwing.com/problem/content/1142/ 模板
阅读全文
摘要:一、单元最短路模板 1.热浪 https://www.acwing.com/problem/content/1131/ spfa或dijkstra模板 2.信使 https://www.acwing.com/problem/content/1130/ floyd偷懒求法 3.昂贵的聘礼 https:
阅读全文
摘要:一、Floyd算法的本质 dijkstra是基于贪心的做法,而bellman-ford和floyd都是基于DP的做法。floyd是如何进行DP的? f[k,i,j] 表示所有从i出发,走到j的,中间只经过结点编号小于等于k的所有路径。 二、Floyd算法的用处 1.求最短路 2.求传递闭包 3.求最
阅读全文

浙公网安备 33010602011771号