- 博客(14)
- 收藏
- 关注
原创 提高—搜索·
BFS最核心的是可以求最小,重要的性质,第一次搜到就是最小,所以如果问题让我们求最小或者最短就是宽搜来写,还有就是基于迭代,不会爆栈,当一个搜索层数很深的时候,节点个数不深的时候,两个搜索都可以选择的时候,一定优先选择BFS。(以上就是两个特点)
2023-02-27 20:59:14
41
原创 提高—DP
NOIP的题目有个很大的特点,他的模型可能不太难,但是我们需要首先发现个性质,就会发现原来这么简单,但是性质发现是特别难的,而且每个题的性质还不一样。从背景抽象出来考察的模型也是很重要的能力。一般算法题考查两方面能力,一是思维,二是写代码的熟练度(比较好练,主要是砸时间)。
2023-02-27 20:57:45
28
原创 提高—基础算法
每个灯只能被按一次,可以从上往下来推,每个开关应不应该按,假设第一行开始的时候就被锁死,就可以通过第二行的状态推出第二行必须怎么按,如果上面是 1 的话, 下面的一定不能按,上面是 0 的话一定得按,然后前两行就被锁死。现在要避免两个数相乘,因为两个数相乘, 就不能用long long 来算,所以转换为两个相加,两个十的十八次方数相加是不会爆long long 的,long long 的最大范围是2的63次方 - 1,这个大概是9e18.只要第一行的开关的状态确定,则所有开关的状态都可以确定。
2023-02-20 00:06:01
26
原创 基础算法—贪心
比如区间问题无外乎排序,按照左端点排序或者右端点排序或者双关键字排序。贪心往往很难,但是考试的时候不会证明一个全新的东西,我们做的最多的是把当前遇到的问题转化为前面见过的某一道问题,所以不用太担心,考试的时候贪心就那几种,虽然每个模型都很难证明,把这几个模型记住也是可以的。2 从前往后依次枚举每个区间 在所有能覆盖strat 的区间中, 选择右端点最大的区间,然后将start更新成右端点的最大值。2 从前往后枚举每个区间,如果当前区间已经包含点,则直接pass, 否则 ,选择当前区间得右端点。
2023-01-26 23:28:42
45
原创 基础算法—DP
②a[i]不在,b[j]在 看似是max=f[i−1][j] , 实际上无法用f[i−1][j]表示,因为f[i−1][j]表示的是在a的前i-1个字母中出现,并且在b的前j个字母中出现,此时b[j]不一定出现,这与条件不完全相等,条件给定是a[i]一定不在子序列中,b[j]一定在子序列当中,但仍可以用f[i−1][j]来表示,原因就在于条件给定的情况被包含在f[i−1][j]中,即条件的情况是f[i−1][j]的子集,而求的是max,所以对结果不影响。这题关键介绍一种全新的实现方式,递归的实现方式。
2023-01-23 10:52:54
15
原创 基础算法—搜索与图论
因为题目上是有重边的情况的,假设1——>2是有权重为2和3的重边,我们在用1号结点更新2号结点时,2号结点会两次入堆,这样我们发现堆中会有很多冗余的点,当堆中弹出下一个 t 时,t 是为{2,2}的,而不是{2、3},因为 2
2023-01-11 19:45:43
11
原创 基础算法—数论
即从 (0, 0) 走到 (n - 1, n + 1) 的所有方案数,一共要走 2n 步,其中向右走 n-1 步,向上走 n+1 步,组合数就是 C(2n, n - 1) 或者 C(2n, n + 1)给定n个0和n个1,它们按照某种顺序排成长度为2n的序列,满足任意前缀中0的个数都不少于1的个数的序列的数量为: Cat(n) = C(2n, n) / (n + 1)数论考试的时候很少有用公式直接算的,可以把一个题目解决掉的情况,而是先会基础知识,然后自己做推导,根据推导的过程,把这个数论的问题解决掉。
2023-01-08 21:11:55
57
原创 算法入门竞赛紫书(个人总结)
四舍五入到最近的整数,如round(-1.3)=-1;异:.严格来说int强制转换时向0取整,比如(int)-1.9=-1,而floor(-1,9)=-2;n = 0, a[++n] = x, 这里的++n是先进行++ 然后赋值a【1】 = x。如: floor(10.5) == 10 floor(-10.5) == -11。同:两者都是向下取整,比如(int)1.9=1, floor(1,9)=1;如: ceil(10.5) == 11 ceil(-10.5) ==-10。
2023-01-03 18:39:03
422
原创 算法笔记—刷题遇到的小知识点(知识点杂)
accumulate ( 形参1 , 形参2 , 形参3 ) 前两个形参指定要累加的元素范围,第三个形参则是累加的初值。一般scanf,printf可以应对大部分的题,但一道题目数据量特别大,就要用到快读快写模板。乘法容易爆范围,但是由于过程中不断取模,所以加法不会爆范围。b可能会爆long long的范围,这种情况就要用到快速乘了。c++中超好用的截取部分字符串的函数substr();使用自带的库函数 accumulate 的方法。快速乘就是将两个要相乘的一个数变成。a,b在long long的范围内。
2023-01-01 17:01:03
167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人