- 博客(15)
- 收藏
- 关注
原创 wqs二分
转移很简单, 𝑓[𝑖][𝑗][0]=min(𝑓[𝑖−1][𝑗][0],𝑓[𝑖−1][𝑗][1]) ,𝑓[𝑖][𝑗][1]=𝑓[𝑖−1][𝑗−1][0]+x[𝑖]−x[𝑖−1]设 f[x] 为连 x 条线的最优答案,易发现为上凸包,考虑 wqs 二分 ,枚举一个附加权值,即可以去掉 j 这一维,就做完了。考虑暴力dp, 𝑓[𝑖][𝑗][0/1] 为前 i 个房子,连了 j 条线,并且第 i 个房子是否和第 i−1 个房子连线。横坐标为选 x 个,纵坐标为选 x 个时最优值,显然答案为 f(m) ,但我们。
2024-07-06 23:29:32
211
原创 树上莫队、带修莫队
树上莫队,美其名曰在树上进行莫队操作,即区间维护、查询但之前的莫队都在线性区间操作,对于树上莫队,考虑转化树形结构为链式结构使用——
2024-06-20 22:50:43
462
原创 莫队详细解析(基础、回滚)
莫队主要是维护区间信息的算法,大部分题都可以用其他高级的数据结构做。但莫队码量小,好理解(本质上是分块优化暴力),不失为一种好做法莫队代码看起来是暴力,但通过将询问按一些步骤排序降低了时间按复杂度。
2024-03-31 16:16:27
1902
1
原创 子集dp + 容斥 好题 CF449D
在给定的 n 个数中选任意个,使选出的数作 与 运算后为 0 的可选方案数。则 ans=g[0]-g[1]+g[2]-g[3] ......首先若没有 与 的要求,方案数为 2^n - 1。考虑容斥 ,g[i]表示选出序列中有 i 列不合法。把每个数的二进制展开排列整齐,考虑每一列是否合法。考虑状态 x ,为选出序列二进制 与操作后的状态。求出每一个 x ,不用子集dp,用“超集” dp。
2024-03-16 12:29:54
174
1
原创 SOS例题 CF165E
对于 a[i] , 存 s[i]= ( ( 1 << 22 ) - 1 ) ^ a[i] ,即为 a[i] 补集。n 个数 , 若 a[i] & a[j] == 0 ,则称 a[i] 与 a[j] 相融。对于每个 a[i] 输出 n个数中(除自己)与他相融的一个数 , 否则输出 -1。f[x] 为 x 子集贡献最大值。考虑子集dp(SOS)
2024-03-16 10:18:54
176
1
原创 线段树+哈希好题——CF213E
考虑用一棵线段树来维护(平衡树也行),每次对于新的 a 排列,删除没用的数,加上新增的。2、得知x的情况下,这题是一个选取 b 序列中的部分数匹配 a 排列的问题。而匹配的问题解法无非那几种,再结合这里匹配的是子序列,有两个排列a和b,长度为n和m,现在将第一个排列的所有数字加上一个整数x,使得第一个排列为第二个排列的。1、x的改变是解决本题的一个难点,那我们可以考虑枚举x的值,以此排除x的影响 (这里用掉了n的复杂度)1、枚举x:由于序列 a 和 b 都为排列,所以 x 从0枚举到序列 b 的长度 m。
2024-02-05 15:29:39
1214
原创 最小生成树入门
生成树本质上是一个图的子图,它的特性如下它是一颗无根树它包含原图的所有节点听着可能有点抽象,说大白话,就是他是一个图删掉若干条边形成的树当然,一个图的生成树可能有很多两种算法本人更喜欢Kr(写起来更方便),分析时间复杂度,Prim在处理稠密图(尤其是完全图)时更有优势。~~~---:)))
2023-08-16 23:08:25
25
2
原创 最短路——dijkstra与Floyd
3、进行n-1次查询,每次找到d[x]最小值的x进行标记,遍历x的子节点,更新d数组(经过点x)时间复杂度分析:n-1次查询,每次找最小值,时间复杂度但这样还不够!不够快!显然找最大值可以用堆优化于是nlogn的代码就应运而生啦小tips:取相反数存入实现小根堆哦。
2023-08-16 19:40:45
20
原创 树形dp入门
树形dp意为在树形结构上进行动态规划,由于在树上,所以使用 dfs 的方式。需要注意的是,每个状态的转移都在回溯时完成。即先遍历到最深的节点,在依次向上转移。这符合动态规划的一般思路(将子问题推广到整体)特点:选某个节点就会有相应的前提(选与不选其前提节点)注:本文中讲解的树形dp分为两种:简单dp与树形背包基础树形dp步骤1、链式前向星存图2、找到根节点3、dfs动态规划:本题型中定义 f[i][j]表示考虑节点i的子树,j=0或1表示选与不选节点i。
2023-08-13 14:22:25
24
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人