随笔分类 - 学习笔记
摘要:01背包 定义:在$M$件物品取出若干件放在空间为$V$的背包里,每件物品的体积为$V_1$,$V_2$至$V_n$,与之相对应的价值为$W_1$,$W_2$至$W_n$。 01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。 在01背包问题中,因为每种物品只有一个,对
阅读全文
摘要:按位与 and 或者 & (前者为Pascal,后者位C++,下同) 定义:两者都为1时,结果为1,否则为0。 例:1001 & 1111 = 1001 1101 & 0001 = 0001 用处: and运算通常用于二进制的取位操作。 判断奇偶 例如一个数 and 1的结果就是取二进制的最末位。
阅读全文
摘要:并查集是一种树型的数据结构, 用于处理一些不相交集合(disjoint sets)的合并及查询问题。 常常在使用中以森林来表示。 朴素: int Find(int x) { if(fat[x]==x) return x;//fat是指父节点 return Find(fat[x]); } void u
阅读全文
摘要:Bellman-Ford Bellman-Ford算法,是单源最短路算法的一种。 与之前的 Dijkstra算法 最大的不同是:Dijkstra算法无法判断含负权边的图的最短路,而Bellman-Ford算法可以处理 存在负权边 的最短路径。 由于Bellman-Ford算法简单地对所有边进行松弛操
阅读全文
摘要:算法一:朴素法 采用两点逐渐向根移动的方法,求出LCA。 具体步骤: 1.求出每个节点的深度 2.询问两个节点是否重合,若重合,则LCA已经求出。否则,选择两个点中深度较大一个,移动它的父亲。 时间复杂度$O(n)$,查询$q$次的话,复杂度$O(qn)$ 优点:简单,该算法允许树动态改变。 代码如
阅读全文
摘要:###差分约束系统 首先,我们先介绍一下什么是差分约束系统。 定义:如果一个系统由$n$个变量和$m$个约束条件组成,形成$m$个形如$a_i-a_j \leq k$的不等式 。 \(i,j\in \left [ 1,n \right ]\) 且 $k$为常数。 (不绝对,若为$a_i-a_j \g
阅读全文
摘要:这题是卡特兰数的一道裸题。 利用这一道题介绍一下什么是卡特兰数(Catalan) ###卡特兰数的定义式: $ h_n=\left{\begin 1 & n=1,0 \ \sum_^h_kh_& n> 1 \end\right. $ 由于这个定义式太复杂。平时我们很难用到。 ###卡特兰数的推出式:
阅读全文
摘要:###贪心算法的定义与性质: 贪心算法是通过做出一系列 选择 来求出问题的最优解。在每一个决策点,它作出在 当前看来最好 的选择。 (也就是说贪心算法并 不从整体最优上加以考虑 ,它所作出的选择只是在某种意义上的 局部最优选择 。大概也是贪心算法名字的由来) (贪心算法进行决策时, 可能依赖于以往所
阅读全文
摘要:#include <bits/stdc++.h> long long binaryPow(long long a,long long b,long long m){ if(b == 0) return 1; else if(b%2==1) return a*binaryPow(a,b-1,m)%m;
阅读全文
摘要:二分查找(Binary Search) 二分查找也称折半查找(Binary Search),相对于普通的顺序查找,二分查找具有极好的效率。 **使用条件:**要求线性表必须采用 顺序存储结构 ,而且表中元素按关键字 有序排列 。 时间复杂度:$ \Theta(logn) $ 查找过程: 首先,假设表
阅读全文
摘要:基本思想: 假设连通网G=(V,E),令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,),图中每个顶点自成一个连通分量。 在E中选择 代价最小 的边,**若该边依附的顶点分别在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边而选择下一条代价最小的边。**依此类推,直至T中所有顶
阅读全文
摘要:特点:是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 举例说明: 图例来自《算法导论》 注意:要求图中不存在负权边。 朴素: void init() { memset(vis,0,sizeof(vis)); memset(d,0,sizeo
阅读全文