自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 状态压缩dp

状态压缩dp思想例题思想主要是状态数量很多时,将状态转换成二进制数01010串,在将这些串在十进制中使用。特点:一般数据范围不会超过20。没啥好说的,来看看题吧例题P2704 [NOI2001] 炮兵阵地思路看到数据范围10*100不规则,还有个10,应该是状压(我们将每行的状态设置为0~(1<<10),表示是否在该点上放置守卫,由于每个炮兵能够攻击到上下2格的位置,那么炮兵能影响的是三行的位置。我们需要设置dp[n][cur][pre],表示当前到了第n行,同时该行

2021-05-14 12:16:51 179

原创 换根dp

换根dp解决的问题示例讲解例题解决的问题基于树上dp的基本模型,题目初始不给出根节点,需要遍历每一个根节点,达到某一个根节点的最佳情况。暴力的思路是循环每个节点作为根节点,同时在遍历整个树,时间复杂度是O(n2)O(n^2)O(n2)。换根dp主要就是将时间复杂度降到O(n)O(n)O(n),在根结点切换时,直接通过一些已经计算过的数据在O(1)O(1)O(1)就能得到另一个根的结果。一般是通过二次扫描,第一次dfs获得预处理数据,第二次dfs进行根节点切换示例讲解需要找到以x点为根结点的树,

2021-05-09 19:14:55 2081

原创 (数位dp)2020icpc上海站C Sum of Log

(数位dp)2020icpc上海站C Sum of Log题目题目大意思路代码题目地址:https://ac.nowcoder.com/acm/contest/9925/C题目大意寻找对于任意二元组(0∼x,0∼y)(0\sim x, 0\sim y)(0∼x,0∼y),除了(0,0)(0, 0)(0,0),并且满足i&j=0i \& j=0i&j=0的所有log2(i+j)+1log_2(i + j) +1log2​(i+j)+1向下取整的和相加的最终结果。思路考

2021-05-08 16:24:27 247

原创 最小生成树算法-prim和kruskal

最小生成树Prim算法适用场景思路模版Kruskal算法适用场景思路模版Prim算法适用场景时间复杂度为O(n2)O(n^2)O(n2),适用于稠密图,按照邻接矩阵存储。思路总体思路于dijkstra算法类似,dijkstra算法每次找离原点最近的点,而prim算法每次找离集合最近的点,如果没学dijkstra的话建议先去学习一下,过程也与dijkstra算法类似,这里直接写模版了。模版int g[maxn][maxn]; //邻接矩阵int dist[maxn]; //到最小生成树的最短距

2021-02-25 15:15:02 296

原创 Floyd算法

Floyd算法解决的问题思想模版解决的问题多源最短路问题,可以求出所有点到所有其他点的最短路,时间复杂度为O(n3)O(n^3)O(n3),可以有负权,不能有负环。思想模版这么简单,直接记模版吧模版//g为邻接矩阵,经过floyd算法后变成就是点到点的最短路int floyd(){ for (int k = 1; k <= n; k ++) for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++)

2021-02-23 19:22:51 315

原创 Bellman-ford算法

Bellman-ford算法解决的问题思路模版特定问题解决的问题最短路问题,时间复杂度为O(n∗m)O(n * m)O(n∗m),可以有负权边,一般情况下都是SPFA算法更加优越,一般只有一种情况下必须使用Bellman-ford算法吗,那就是限制到最小距离的边数k,其他情况下一般SPFA算法更加适用。思路对每条边都进行松弛操作n - 1次,一点能实现最短路。松弛:例如一条边a->b,权值为w,那么dist[b]=min(dist[b],dist[a]+w)dist[b] = min(dis

2021-02-23 13:43:49 1141

原创 KMP

KMP算法解决的问题思想模版解决的问题字符串匹配问题,给定一个目标匹配串,一个模式串,在目标匹配串中查找模式串,若匹配串长度n,模式串长度m,可以将时间复杂度从O(n∗m)O(n * m)O(n∗m)降低到O(n+m)O(n + m)O(n+m)。思想暴力解法枚举每一个原串,同时开始枚举模式串,一个一个匹配下去,若匹配失败,从原串下一个与模式串第一个重新开始匹配。缺点:没利用好已经匹配的信息,当原串与模式串已经匹配了很多值时,一次匹配失败,全部从头与原串第二个进行匹配。KMP①匹配就是利用

2021-02-21 11:49:32 185

原创 数位dp

数位dp解决的问题思想解题方法方法前置具体方法①递推法②记忆化搜索解决的问题一般给定一个区间l∼rl\sim rl∼r,算出所有满足某一条件的数的数量,一般可以解决10100010^{1000}101000级别的问题,如果暴力枚举,那么必定会超时,我们使用数位dp解决问题。思想不用传统的枚举每一位数在check一下,我们可以枚举每一位数可以的取值,用类似dfs搜索的方式枚举,然而如果纯用dfs枚举每一位数,那么最后时间复杂度不会改变,仍然要和暴力枚举一样枚举所有的数。这个时候到dp上场了,dp本

2021-02-14 14:35:42 289

原创 ST表

ST表解决的问题思想模版题P3865 【模板】ST表解决的问题静态RMQ问题,区间查询最大值最小值优点:查询的时间复杂度为O(1),查询速度极快写起来比较简便,容易理解缺点:只能解决静态问题,无法修改区间内的值思想①预处理主要思想为动态规划,用一个数组st[i][j]st[i][j]st[i][j],表示区间i∼i+2j−1i \sim i + 2^j - 1i∼i+2j−1内的最大值,意思就是从第iii个开始,之后2j2^j2j个数中的最大值,因此,可以用一个数组就保存最后的值

2021-02-07 15:39:09 156

原创 二分算法

二分专题STLSTL//升序序列中lower_bound(begin,end,num); //查找第一个大于等于的地址,不存在则返回endupper_bound(begin,end,num); //查找第一个大于的地址//降序序列lower_bound( begin,end,num,greater<type>() );upper_bound( begin,end,num,greater<type>() );...

2021-01-25 21:52:56 612

原创 单调队列/单调栈

单调队列模型思想准备具体模版例题P1714 切蛋糕模型滑动窗口模型P1886 滑动窗口 /【模板】单调队列思想维护一个单调的队列,队列中删除无意义的数,例找最大值时维护一个单调递减的队列,假设有a[i]<a[j]a[i]<a[j]a[i]<a[j]并且i<ji<ji<j那么可以得知a[i]a[i]a[i]在题中无意义,因为假如a[i]a[i]a[i]可以当作最大值,那么a[j]a[j]a[j]一定也能,并且还优于a[i]a[i]a[i],只维护一

2021-01-17 19:10:23 329

原创 树形dp

树形dp总结例题1. 没有上司的舞会(简单dp)洛谷P1352总结树形dp主要是先建立一个树图, 对于每个结点定义一个状态,进行转移,通常用递归,通过类似深度优先遍历的方法,使得在回溯时更新全部结点例题1. 没有上司的舞会(简单dp)洛谷P1352大致题意: 有n个人,每个人之间有从属关系,每个人不想与上司之间同时参加舞会,每个人有一个快乐指数,问能参加舞会最大的快乐指数?解:定义dp[u][0]、dp[u][1]dp[u][0]、dp[u][1]dp[u][0]、dp[u][1]分别为 所有以

2020-11-30 22:05:20 94

原创 分块

分块思想:将长区间分为小区间,维护区间值,降低时间复杂度通常将区间分为n\sqrt{n}n​块,这样可以保证块数以及块数内的元素都较少,对区间內部的整块进行整体的操作,对区间边缘的零散块单独暴力处理。时间复杂度:O(n)O(\sqrt{n})O(n​)...

2020-11-27 11:03:38 185

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除