摘要: 最小生成树[P3366] 5min并查集[P3367] 4min单源最短路[P3371] 6min线性筛[P3383]快速幂[P1226] 3min堆[P3378]字符串哈希[P3370]线段树[3372] 10min树状数组[3374]网络流[3376]KMP[3375]LCA[3379]gcd(阅读全文
posted @ 2018-06-01 18:08 刘文尧 阅读(42) 评论(1) 编辑
摘要: 斐波那契数列——兔子问题: 春天来了, 又到了交配的季节。一般而言, 一对兔子在出生一个月后(即出生后的第二个月)就 有了繁殖能力,此后一对兔子每个月能生出一对小兔子来。例如,若最开始有一对刚出生的兔子, 兔子的繁殖如下表所示: 经过月份 0 1 2 3 4 5 6 7 幼崽对数 1 0 1 1 2阅读全文
posted @ 2019-07-19 08:03 刘文尧 阅读(4) 评论(0) 编辑
摘要: 最长上升子序列 最长上升子序列是DP的入门题目,解法多样,只介绍$nlog_n$的做法。 其实nlogn的做法不是传统的DP而是贪心。 定理:如果当前已选子序列的最后一位ans[last]有更合适的选择,则该选择a[i]满足$ans[last 1] using namespace std; int 阅读全文
posted @ 2019-07-17 20:18 刘文尧 阅读(5) 评论(0) 编辑
摘要: "题目" 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题阅读全文
posted @ 2019-07-15 20:12 刘文尧 阅读(3) 评论(0) 编辑
摘要: "题目" K短路的解法很多,其中比较简单拿到不少分的就是A 算法了。 这个题也是通过估价函数的优先级来确定K短路的。 假设估价为一条从起点到终点的路径的权值和。 将到达终点的路径都放入优先队列中,从优先队列中取出的第k个值就是k短路。 代码: c++ include include include 阅读全文
posted @ 2019-07-15 11:30 刘文尧 阅读(5) 评论(0) 编辑
摘要: SPFA和DIJ求最短路的算法的坑点一直是很多的。经常会让人搞不懂。 易错案例: 用重载运算符来排序,如: 这种做法是不对的,该dis值在堆里不会更新甚至会堵住。 正确案例: 目前只有两种优化算法最可靠,分别为优先队列来优化spfa或dij。 $SPFA$: 每次从堆中只需要取出到t的最短路最小的元阅读全文
posted @ 2019-07-14 19:02 刘文尧 阅读(4) 评论(0) 编辑
摘要: "题目" 一道做法多种多样的题,DP做法的状态也很多。 我用$dp[i]$表示在第i秒发车的时间和,然后dp方程就很好写了 $dp[i] = dp[j] + i车的等待时间$j属于i 2m ~ i m。 然后i车的等待时间可以用前缀和来优化求出,虽然很慢,但是足以通过这道题了。 c++ includ阅读全文
posted @ 2019-07-05 17:24 刘文尧 阅读(7) 评论(0) 编辑
摘要: "题目" 如果暴力的话,时间复杂度是$rcC(n, n/2)^2$,主要考察搜索枚举行和列,并没有用到DP的思想。 考虑优化的话,发现枚举行或列中至少需要一步,因为这个题只能预处理优化,如果都不枚举,就相当于盲人摸象,无法预处理来优化。 因此要搜索枚举行或列,然后预处理并在列或行上跑DP,这样就可以阅读全文
posted @ 2019-07-02 17:39 刘文尧 阅读(5) 评论(0) 编辑
摘要: "题目" 按理来说是可以二分的,但是发现其实直接暴力然后注意细节就可以了。 先找到牛所在的起点,然后分别向右找和向左找。 第一次查找从$r$点冲到$l$点时,突破不了$l$,从$l$点冲到$r$,能突破$r$,要给$r$加多少,然后取$min$,每次$l ,r$并不需要返回原先值,原因是l没有增加前阅读全文
posted @ 2019-06-29 20:51 刘文尧 阅读(5) 评论(0) 编辑
摘要: "题目" 题意:求最小的从某一个点到其余点的切比雪夫距离和。 将一个图中的$(x,y)$坐标转到新坐标$(x+y,x y)$后,图中的曼哈顿距离就是新图中的切比雪夫距离, 证明:分类讨论, 1.$x2 x1,y2 y1时,x2 x1+y2 y1=x2+y2 (x1+y2)$就是新坐标的X差。 2.$阅读全文
posted @ 2019-06-29 19:44 刘文尧 阅读(7) 评论(0) 编辑
摘要: "题目" 搜索+剪枝,主要考察细节和搜索的顺序,首先可以发现所有数据均为整数,所以初始化每层的蛋糕R和H是整数,然后从高层向低层搜索,然后预处理出各层向低层的最小面积和体积用来剪枝。 就可以每层从当前最大半径向最小半径枚举,并分类讨论加剪枝即可。 c++ include using namespac阅读全文
posted @ 2019-06-28 17:39 刘文尧 阅读(9) 评论(0) 编辑