- 博客(13)
- 收藏
- 关注
原创 普通莫队算法
普通是用来离线查询一段区间里面的答案莫队算法由莫涛发明,一般分为两类,一是莫队维护区间答案,二是维护区间内的数据结构。当然也有树上莫队,带修改莫队、二维莫队等等。这篇文章主要介绍的是普通莫队算法。如果我们碰到一个问题,在[1-n]的区间内,有很多l,r需要查询,这时候我们就可以用莫队来写。比如说,我们遇到一个问题,有一个序列,要求在这个序列[l,r]区间内的不同的所有不同数各自的个数,当l,r很多的时候,我们就可以用莫队来做。首先就是莫队的基础,就是一个个处理询问我们先模拟一下这个过程ql和qr
2021-07-31 16:35:01 417 1
原创 动态规划悬线法
#include<bits/stdc++.h>using namespace std;const int N=2010;typedef long long ll;int ma[N][N],l[N][N],r[N][N],up[N][N];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++)
2021-07-23 14:51:12 787 2
原创 树形dp和二分图
树形dp和二分图树形dp没有上司的舞会选课树形dp没有上司的舞会树形dp主要是用于对一棵树上的结点按照树的遍历顺序进行动态规划,树形dp的思维难度不高,主要原因是树的遍历方式一般固定,dp的变化不多,所以多做题熟悉树形dp的方式就可以很好的掌握这种算法。没有上司的舞会.在一场舞会上,每个员工不能和自己的直接上司共同出席,每个员工都有出席的快乐质数,求舞会最大的快乐值。这是很经典的树形dp图,主要是用到树的遍历嵌套上01背包状态表示:f[u][0]:所有以u为根的子树中选择,并且不选u这个点的
2021-07-18 09:22:15 369 1
原创 最短路(南昌理工学院acm集训)
树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。图的存储:稠密图 接矩阵:g[a][b] 存储边a->b稀疏图 邻接表:对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;// 添加一条边a->bvoid add(int a, int b){
2021-07-10 16:19:04 263
原创 Educational Codeforces Round 110 B. Array Reodering
给出一个序列,可以随意安排序列中元素的顺序,目的是使满足gcd(a[i],2*a[j])>1的i,j对数最大0<i<j<n做法:观察发现,a[i]如果是一个偶数,那么必定可以和2a[j]的gcd>1,所以要先统计序列中偶数的数量,然后把奇数全都放在一个数组,暴力循环找出所有的答案代码:#include<bits/stdc++.h>#define ll long long using namespace std;const int N = 32;co
2021-06-05 20:08:30 129
原创 Codeforces Round #722 (Div. 2)
B. Sifid and Strange Subsequences题意如下: 给出一个数列,找出一个数列,使找出的数列中所有的数都满足|a[i]-a[j]|>Max。Max是所挑选的数列中的最大值,输出能选数列的最大长度解法:一开始我想双指针维护一个区间里面的最大值和最小值,但在求任意两个数的差的绝对值的时候做不出来,然后发现可以分类讨论。我们可以发现一个性质,当所选的数列中出现两个正数的时候,是肯定不行的,因为两个整数的差的绝对值肯定是小于其中一个正数,所以在所选的序列中最多只能出现一个正
2021-05-25 18:17:35 400
原创 acm常用英语词汇
###acm常用英语词汇Acyclic 非循环的 efficiently高效地 cubic 立方体的Feature 特征 categories 类别 generate 生成Self-loops 自环 abbreviate 缩写 distributed 分布式的Production of number 数的乘积 concentr...
2021-05-13 17:08:27 1034
原创 Codeforces round #717
Codeforces round #717Problem B. AGAGA XOOORRR这题数组里面两个相邻的数可以异或一下代替这两个数然后插入数组中,判断最终序列是否全部相等,最终序列的长度大于等于2发现最终序列的长度要么是2要么是3因为当最终序列的长度是4的时候,例如X,X,X,X 可以变成0,X,X然后变成X,X当最终序列的长度为2时,可以直接对数组内的所有元素异或,如果答案为零则满足当最终序列的长度为3时,先求出所有元素的异或值为ans,这个序列的前缀异或值数组里面至少有两个相同的
2021-04-24 21:08:16 118 1
原创 阶段小结(南昌理工学院acm集训队)
优先队列优先队列就是让优先级高的出列。它是队列和排序的组合,不仅可以储存数据,还可以将这些数据按照设定的规则进行排序。每次push和pop操作,优先队列都会动态调整,把优先级最高的元素放在前面。正因为优先队列这种神奇的性质,有些题目配合优先队列会有奇效定义:priority_queue<Type, Container, Functional>比较方式默认用operator< , , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。(也就是默认非升序)比较函数
2020-08-23 10:34:57 276
原创 分治入门与实例(南昌理工学院ACM集训队)
分治问题特征(1)平衡子问题:子问题规模大致相同,能把问题划分成大小差不多相等的k个子问题,最好k=2,即分成两个规模相等的子问题。子问题规模相等的处理效率比子问题不等的效率要高(2)独立子问题 :子问题之间相互独立。这是区别于动态规划算法的基本特征,动态规划算法中子问题是相互联系,不是相互独立的。特别需要说明的是,分治法不仅能让问题变得容易理解和解决,而且能大大优化算法的复杂度,一般能把O(N)优化到O(log2n)。这是因为局部的优化有利于全局;一个子问题的解决,其影响力扩大了k倍,即扩大到了
2020-08-15 15:16:38 516 1
原创 完全背包&&区间dp&&最长上升子序列(南昌理工学院ACM集训队)
做了许多动态规划题目,结合yxc大大的视频,总结了一点动态规划模板,用几道经典例题加以解释dp 第一步——状态表示(dp[i][]j); 个人感觉一道动态规划题最难的一步就是状态表示,有一个清晰直观的状态表示做题时便势如破竹。状态标识包括集合和属性两点,集合是题目中的各个要素结合所形成的状态,属性则是题目要求状态的情况。dp 第二步——状态计算(状态转移方程);根据自己写的状态表示来建立状态转移方程,确立状态转移方程的同时也需考虑其复杂度。dp 第三步——状态转移方程的优化;初学者可以先明白动态转移方
2020-08-09 10:04:56 991
原创 动态规划入门
基础dp都是经典例题,非常直观,易于理解。硬币问题HDU 2069.暴力法可以组个枚举各个面值的硬币的个数,判断每种情况是否合法。枚举量是s/50s/25s/10s/5s/1次会超时动态规划定义一个dp[i][j]数组建立一个转移矩阵其中,横向是金额,纵向是硬币数...
2020-08-02 09:43:03 151
原创 深度优先搜索
深度优先搜索从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前一步,总是试图走得更远。所谓远近(或深度),就是以距离起点的步数来衡量的。这个过程和递归的性质很像,所以一般用递归来实现这个过程深度优先搜索其实就是一个不断回溯的过程图遍历所有的点例 HDU 1312.#include<iostream>#include<
2020-07-26 20:22:58 529 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人