一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用题目中任何隐藏的特殊性质). 运用枚举的话,首先要确认枚举的状态,或建立一个方便枚举的模型.由此知道枚举的优化主要在以下方面: 1.建立有效.巧妙的枚举模型,减少对非解的枚举. 2.如有多步操作,适当调整各步操作的顺序,使枚举高效化. 3.学习更强大的算法.数据结构.性质等等,用它们来优化枚举(滑稽…
简单数据结构: 一.二叉搜索树 1.前置技能: n/1+n/2+……+n/n=O(n log n)  (本天复杂度常涉及) 2.入门题引入: N<=100000. 这里多了一个删除的操作,因此要将所有的数都记录下来维护.一个个枚举很容易超时,这时就到了二叉搜索树显示本领的时候了. (注:子树节点的key值小/大于这个点,即子树中所有的节点的key值都小/大于这个点.同时不考虑有两个节点key值相等的情况) 实例: 1.查询最大/小值: 最大值自然就是往右儿子走啦. 核心代码(最小值): int…
全天动态规划入门到入坑... 一.总概: 动态规划是指解最优化问题的一类算法,考察方式灵活,也常是NOIP难题级别.先明确动态规划里的一些概念: 状态:可看做用动态规划求解问题时操作的对象. 边界条件:不需要.或不能由别的状态推出,且已知.或可算出的状态.递推时就用边界条件推出所有状态. 状态转移方程:由已知状态推出未知状态所用的方式.或原则等,依照它可用已知状态推出未知状态. 动态规划(DP)主要有:线性DP,数位DP,区间DP,树形DP,状压DP和其他DP(难度较高的还有数据结构优化DP,博…
今天主要讲一下数学的知识. 一.进制转换: 十进制到k进制:短除法:顺除至0,逆序取余. k进制转十进制:乘权相加. 常见进制:四进制(对应2位二进制).八进制(对应3位二进制).十六进制(对应4位二进制,A表示10,B表示11,...,F表示15) 常见进制在c++中的表示:二进制:前加0b:八进制:前加0:十六进制:前加0x. 小提示:只有十进制下的读数是“...几千几百...”的读法,其他进制都直接把数位上的数读出来就行辣. 二.高精度 常见数据类型的范围:int:[-232,232-1]…
今天主讲图论. 前言:图的定义:图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交.它们亦可写成V(G)和E(G). 一.图的存储: 1.邻接矩阵: 2.邻接表: 数组模拟链表实现:记录每条边的终点.边权(如果有的话).同一起点的上一条边的编号,并记录以每个点为起点的最后一条边的编号. STL中的vector:记录以每个点为起点的边. 一些vector的细节: vector 本质就是 c++ 模板库帮我们实现好的可以变长的数…
上午7点半到的国防宾馆,8点开始的培训. 讲课人林永迪. 没错就是这个人: 他推荐的教辅:刘汝佳紫书,算法导论(也就看看..),刘汝佳白书 先讲模拟.(貌似就是看题论题. 然后贪心. 贪心没有固定的模板,他是一种思想... 一道例题链接(USACO 然后是线段覆盖和区间覆盖 会场安排问题,也是最经典线段覆盖的问题: 然后是经典区间覆盖问题: 喷水装置 [题目描述] 长 LL 米,宽 WW 米的草坪里装有 nn 个浇灌喷头.每个喷头都装在草坪中心线上(离两边各 W2W2 米).我们知道每个喷头的位…
讲课人更换成dms. 真的今天快把我们逼疯了.. 今天主攻数据结构, 基本上看完我博客能理解个大概把, 1.LCA 安利之前个人博客链接.之前自己学过QWQ. 2.st表.同上. 3.字符串哈希.同上. (貌似我好像都学过的样子.不过dms讲的是真的好,声情并茂) 4,并查集.同上. 5,树状数组,同上. 6,线段树,同上. 树状数组主要出现形式:逆序对,二位偏序,多个树状数组. 然后讲了一下午树状数组,线段树. 晚上讲splay... 到了晚上,然而并没有听懂什么,,只是看着dms打代码发呆,…
题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<iostream> using namespace std; long long gcd(long long a,long long b)//gcd函数求最大公约数 { if (!b) return a;//b!=0 else return gcd(b,a%b); } int main() { long lo…
还有一天就结束了..QWQ 好快啊. 昨天没讲完的博弈论DP: 一个标准的博弈论dp,一般问的是是否先手赢. 博弈论最关键的问题:dp过程. 对于一个问题,一定有很多状态,每个状态可以转移到其他的一些状态.如果存在一个状态,且不能转移到其他状态,那么我们设这个状态为必败态,那么他相邻的能够转移到必败态的状态因为只有一种转移方式,那么一定为必胜态,(假设操作双方选手绝顶聪明,每一步都朝着最优状态走),如此这样交替下去,推到开始状态,就可以判断了. 怎么转换? 对于一个节点以及他所有子节点来讲,如果…
长者zhx来啦.. (又要送冰红茶了...) zhx一上来就讲动态规划...是不是要逼死人.... 动态规划: 最简单的例子:斐波那契数列.因为他是递推(通项公式不算)的,所以前面的已经确定的项不会影响后面的,满足无后效性,为最简单的动态规划. 3种写法:用算好的自己来算别人,或者用别人更新自己,记忆化搜索. 计算斐波那契数列f[n]=f[n-1]+f[n-2]. 如果用dfs来计算的话,在dfs函数里return dfs(n-1)+dfs(n-2); 由于没有记忆化,(没有把每一个阶段记录下来…