ACM北大暑期课培训第一天】的更多相关文章

今天是ACM北大暑期课开课的第一天,很幸运能参加这次暑期课,接下来的几天我将会每天写博客来总结我每天所学的内容.好吧下面开始进入正题: 今天第一节课,郭炜老师给我们讲了二分分治贪心和动态规划. 1.二分主要讲了两个函数:binary_search 和 lower_bound binary_search  在包含size个元素的.从小到大排序的int数组a里查找元素 p,如果找到,则返回元素下标,如果找不到,则返回-1. lower_bound    在包含size个元素的.从小到大排序的int数…
昨天没时间写,今天补下. 昨天学的强连通分支,桥和割点,基本的网络流算法以及Dinic算法: 强连通分支 定义:在有向图G中,如果任意两个不同的顶点 相互可达,则称该有向图是强连通的. 有向图G的极大强连通子图称为G的强连 通分支. 有向图强连通分支的Tarjan算法 做一遍DFS,用dfn[i]表示编号为i的节点在DFS过程中的访问序号(也可以叫做开始时间).在DFS过程中会形成一搜索树.在搜索树上越先遍历到的节点,显然dfn的值就越小.dfn值越小的节点,就称为越“早” . 用low[i]表…
今天讲了DFA,最小生成树以及最短路 DFA(接着昨天讲) 如何高效的构造前缀指针: 步骤为:根据深度一一求出每一个节点的前缀指针.对于当前节点,设他的父节点与他的边上的字符为Ch,如果他的父节点的前缀指针所指向的节点的儿子中,有通过Ch字符指向的儿子,那么当前节点的前缀指针指向该儿子节点,否则通过当前节点的父节点的前缀指针所指向点的前缀指针,继续向上查找,直到到达根节点为止. ps:构造前缀指针时在最前面加一个0号节点. 对于一个插入了n个模式串的单词 前缀树构造其前缀指针的时间复杂 度为:O…
今天继续讲的动态规划 ... 补充几个要点: 1. 善于利用滚动数组(可减少内存,用法与计算方向有关) 2.升维 3.可利用一些数据结构等方法使代码更优  (比如优先队列) 4.一般看到数值小的 (十几以内的 ) 考虑 状压 / 搜索 5.状压:有时,状态相当复杂,看上去需要很多空间,比如一个数组 才能表示一个状态,那么就需要对状态进行某种编码,进行 压缩表示. ( 比如:状态和某个集合有关,集合里可以有一些元素,没有 另一些元素,那么就可以用一个整数表示该集合,每个元素 对应于一个bit,有该…
今天学了有流量下界的网络最大流,最小费用最大流,计算几何. 有流量下界的网络最大流 如果流网络中每条边e对应两个数字B(e)和C(e), 分别表示该边上的流量至少要是B(e),最多 C(e),那么,在这样的流网络上求最大流,就是有下界的最大流问题. 这种网络不一定存在可行流 思路:将下界“分离”出去,使问题转换为下界为0的普通网络流问题. 将原弧(u,v)分离出一条必要弧和一条非必要弧: 假设B(u,v)是下界,则分离出两条弧: C1(u,v) = B(u,v) -- 必要弧 C2(u,v) =…
今天讲的扫描线,树状数组,并查集还有前缀树. 扫描线   扫描线的思路:使用一条垂直于X轴的直线,从左到右来扫描这个图形,明显,只有在碰到矩形的左边界或者右边界的时候,这个线段所扫描到的情况才会改变,所以把所有矩形的入边,出边按X值排序.然后根据X值从小到大去处理,就可以用线段树来维护扫描到的情况. 如果碰到矩形的入边,就把这条边加入,如果碰到出边,就拿走. 用根结点记录被覆盖的总长度     更新 插入数据的顺序: 将矩形的纵边从左到右排序,然后依次将这些纵边插入线段树.要记住哪些纵边是一个…
今天讲了几个高级搜索算法:A* ,迭代加深,Alpha-Beta剪枝   以及线段树 A*算法 启发式搜索算法(A算法) : 在BFS算法中,若对每个状态n都设定估价函数 f(n)=g(n)+h(n),并且每次从Open表(队列)中选节点进行扩展时,都选取f值最小的节点,则该搜索算法为启发式搜索算法,又称A算法.     g(n) : 从起始状态到当前状态n的代价     h(n) : 从当前状态n到目标状态的估计代价 A算法中的估价函数若选取不当,则可能找不到解,或找到的解也不是最优解.因此,…
今天讲的内容是深搜和广搜 深搜(DFS) 从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”. bool Dfs(V) { if( V 为终点) return true; if( V 为旧点 ) return false; 将 V标记为旧点 ; 对和 V相邻的每个节点U { if( Dfs(U) == true) return true; } return false; } int main() { 将所有点都…
ACM培训第一天,尽管我嘴上说是来打酱油的,但我非常想学好.1.一定要多思考,多总结:2.多问同学 :3.学会向女生说话,大胆,自信.(今天有女生向我说话了,很高兴.她很大胆,我要向她学习......................... 明天继 #include <stdio.h> int main() {  printf("  * *      * *\n"); printf(" *    *   *    *\n"); printf(" …
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你一共有几种填法. 变形一下就会发现其实是走非交叉格子路径计数,限制条件下的非降路径问题.就是从左上到右下走格子路径.从上到下为0——n,从左到右为0——m. 考虑 01 和 12 的分界线,是 (n, 0) 到 (0, m) 的两条不相交(可重合)路径,因为起点重合了,所以把其中一条路径往左上平移了…