清北学堂2019.7.14

Day 2 林永迪

首先,先将了一波昨天没讲完的贪心。。。

过河问题:

 

 

首先,经过总结,发现应该让最慢的两个人一起过河

不妨先设a,b,c,d速度由快到慢,则有两种情况

  1. ac a ad a ————> c+d+2*a
  2. ab a cd b ————> d+2*b+a

这两种求一个min就可以了(其实只与b,c的大小有关)

还有另外一种更为玄学的方法——k搜索

然后便是分治算法了

先介绍一下二分(屠龙宝刀点击就送

首先是NOIP2012借教室

 

 

这个题在之前好像线段树会卡掉(毕竟之前的老年机。。。)

然后呢,显然是二分

一会看连接吧qwq

 

 

 

 

 

 

 

然后是三分(一般是单峰函数)

比较实数:double eps=1e-8

 

 

多峰的函数把他切割成好多好多个单峰函数,然后跑三分。。。(这是什么操作)

 

 

分块

 

 

 

 

  1. 将区间分为√n那么就会有三种情况(在[l,r]tag标记)O(n√n)
  2. 分块(块大小√n),若两个数在同一块中,则暴力遍历,A数组是原数组,B数组是每一块(经过排序后)的数组。若不在同一块中,则只需遍历块,然后跑一个二分,答案相加,两端跑暴力(O√n log n +2√n))若加一个数,则在A数组上加那个数,然后在B数组排序就行了
  3. 一个long long范围的数最多被开方六次

 

 

color[i]:表示下标为i的球的颜色

pre[i]:表示前一个颜色为color[i]的球的下标

pre[i]<x<i,则[x,i]区间内只有一种颜色为color[i]的球

所以只用查询[l,r]里所有pre[i]<li的个数即可

修改颜色的话,只需要暴力维护某个颜色的数组,再造一个类似于链表的东西就可以了

深度优先搜索(dfs

深搜,电风扇,大法师,回溯

是自己欺骗自己的好东西(滑稽)

较多用于走迷宫和树的遍历中(以及大名鼎鼎的网络爬虫)

虽然要利用栈进行递归但是不可思议地空间依旧比广搜小

一般结合强力的剪枝服用时有奇效

由于不需要搜索完所有的节点也能出一些结果,故在骗分界有广泛的好评

在寻找最优解的问题上基本被广搜吊打

(能写循环写循环,因为搜索复杂度过大)

杀人放火,居家常备,解决最优性问题有两把刷子

擅长答案在搜索树比较浅的位置时的情况

虽然名字叫广度优先搜索,但其实并不喜欢很宽的搜索树

状态的表示并没有深搜来的舒服

并没有很好的剪枝策略,垃圾节点一大堆

空间上完全被锤爆了,可以说是一点都没有考虑过内存的想法

双向广搜可以去掉一些垃圾结点(比广搜更优)

迭代加深搜索:

 

 

下午就变成了数论qwq

高精除法(高精除以高精)

因为计算机无法试除,所以用减法,能减就减

 

高精度开方

首先将数字按两位两位的分开(小数点为界)

然后是快速幂,矩阵快速幂,高斯消元,筛法

 

 

 

 

div是整除

 

 

晚上来讲讲BFS(best first search???)

BFS——Breath First Search : 宽度优先搜索

BFS——Best First Search : 贪心搜索

BFS + BFS = ?

启发式搜索相较于其他的搜索的优势在于引入了一个启发式函数f(x) = g(x) +h(x)

g*(x) : 从 S 到 x 的理论最近距离

g(x) : 对 S 到 x 对于 g*(x) 的估计

f*(x) : 从 x 到 T 的理论最近距离

f(x) : 从 x 到 T 对于 f*(x) 的估计

h(x):理想的最短距离

h*(x):实际最短距离

当满足 f(x) <= f*(x) 时,总能找到最优解

BFS + BFS = A*↑

A* 算法的流程↓

BFS 几乎一样,只是每次都弹出当前局面中f(x)最小的那个局面进行扩展

——故需要维护一个优先队列

——使用系统的priority_queue<>即可

f(x) = g(x) + h(x) 中 h(x) = 0 即失去了启发式函数,则变为Breath First Search

f(x) = g(x) + h(x) 中 g(x) = 0 则变为 Best First Search

第一次到终点时输出g(x)即可

 

 

 

 

 

↑算是逆元知识

posted @ 2019-07-14 18:17  卍GC卐  阅读(151)  评论(0编辑  收藏  举报