Processing math: 100%

随笔分类 -  题解

摘要:"题目" 倍增 直接用图论算法必然解决不了这个问题,所以可以使用倍增算法优化。 我们遇到这个题该怎么想,首先,题目要求的值是1到n的最小代价。代价是路径的二进制中1的个数。 我们先预处理出每两点之间是否有边权和为(1 define N 1000111 define int long long usi 阅读全文
posted @ 2019-09-18 14:38 DAGGGGGGGGGGGG 阅读(126) 评论(0) 推荐(0) 编辑
摘要:"题目" 加工调度问题: 对于每个物品无非有三种情况: 1. A所用时间 B所用时间。称其为二类 3. 和A、B相等的三种情况。称其为三类 把问题转化一下,则有一类是B正在占用的时间变多,二类是B占用的时间变少。 则肯定使B先变多后变少,才能使时间花费最少。 所以先一类后二类,然后再考虑每种情况内部 阅读全文
posted @ 2019-09-15 11:34 DAGGGGGGGGGGGG 阅读(559) 评论(0) 推荐(0) 编辑
摘要:"题目" 任务调度贪心。 需要明确一点,任务调度贪心题,并不是简单地应用排序的贪心,而是动态的运用堆,使每次选择是都能保持局部最优,并更新状态使得下次更新答案可以取到正确的最小值。 这是A过程的解。 然后考虑B过程则需要从最后的物体开始操作,可以使时间最小,取每个物体最后完成的最大值。而且使每个物体 阅读全文
posted @ 2019-09-11 16:42 DAGGGGGGGGGGGG 阅读(159) 评论(0) 推荐(0) 编辑
摘要:"题目" dfs+证明。 对于题目描述,可以发现K其实就是大于等于原图中最大度数的最小奇数,因为如果原图度数最大为奇数,则最多颜色肯定为K,而如果原图最大度数为偶数,则K又是奇数,则最多颜色也肯定小于等于K。 然后可以dfs染色,染色有两种方法,一种是枚举颜色,然后判断可行性并考 阅读全文
posted @ 2019-09-09 17:47 DAGGGGGGGGGGGG 阅读(199) 评论(0) 推荐(0) 编辑
摘要:扫描线 扫描线问题主要利用了线段树。 因为矩形的并集比较难算,所以我们可以用(扫描线被截长度×所扫描的高度)来求和。而这样做发现可以用线段树来优化,具体优化方式如下:所扫描的高度比较好求,主要是扫描线被截长度需要优化。 我们可以设横边有一个a权值,如果该边是矩阵的下边则设为1,相反就设为 阅读全文
posted @ 2019-08-14 16:56 DAGGGGGGGGGGGG 阅读(414) 评论(0) 推荐(0) 编辑
摘要:"题目" 一道模拟题,问题不是很大,主要需要读题清晰,且算法的操作顺序要搞明白,比如在每一秒的开始,所有无人机 先 移动,然后再一步一步操作。 然后就是判断方向是否一致了,细节还是很多的。 c++ include using namespace std; int n, t; struct dir { 阅读全文
posted @ 2019-08-14 08:26 DAGGGGGGGGGGGG 阅读(157) 评论(0) 推荐(0) 编辑
摘要:"题目" 其实跟线段树1,2差不多,唯一需要区别的就是lazy数组及标记下传时候的操作了。 线段树左儿子的个数应该是比右儿子的个数大的。所以我们需要再将区间异或时,一定要搞清楚每个区间的元素有多少个,然后再将该区间元素的0,1个数颠倒一下就好了 阅读全文
posted @ 2019-08-13 20:47 DAGGGGGGGGGGGG 阅读(146) 评论(0) 推荐(0) 编辑
摘要:"题目" 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想。 要注意在区间上连续的节点,一定是在一棵子树中。 c++ include define int long long define ls left, mid, root 1; if (lazy[root]) { ans[ro 阅读全文
posted @ 2019-07-23 08:47 DAGGGGGGGGGGGG 阅读(196) 评论(0) 推荐(0) 编辑
摘要:分数规划 分数规划可以用来处理有关分数即比值的有关问题。 而分数规划一般不单独设题,而是用来和dp,图论,网络流等算法结合在一起。 而基础的做法一般是通过二分。 二分题目我们都知道,需要求什么的最小或最大值,就二分什么。 而该最小或最大值都会满足单调性。 设当前最大值为maxn,如果存在比值使得 阅读全文
posted @ 2019-07-21 19:44 DAGGGGGGGGGGGG 阅读(180) 评论(0) 推荐(0) 编辑
摘要:"题目" 二分加最短路。 因为原题中要求给定一个值n和一个次数m,使这个值尽量小的同时存在一条1到n的路径上权值大于该值的边的个数小于次数m。 此时我们发现该值和次数满足单调性,即该值越小个数越多。 因此可以用二分,再考虑如何check 可以将路上的权值是否大于n这一条件做布尔边权值,这样跑出来的最 阅读全文
posted @ 2019-07-21 16:16 DAGGGGGGGGGGGG 阅读(186) 评论(0) 推荐(0) 编辑
摘要:斐波那契数列——兔子问题: 春天来了, 又到了交配的季节。一般而言, 一对兔子在出生一个月后(即出生后的第二个月)就 有了繁殖能力,此后一对兔子每个月能生出一对小兔子来。例如,若最开始有一对刚出生的兔子, 兔子的繁殖如下表所示: 经过月份 0 1 2 3 4 5 6 7 幼崽对数 1 0 1 1 2 阅读全文
posted @ 2019-07-19 08:03 DAGGGGGGGGGGGG 阅读(7717) 评论(0) 推荐(0) 编辑
摘要:最长上升子序列 最长上升子序列是DP的入门题目,解法多样,只介绍nlogn的做法。 其实nlogn的做法不是传统的DP而是贪心。 定理:如果当前已选子序列的最后一位ans[last]有更合适的选择,则该选择a[i]满足$ans[last 1] using namespace std; int 阅读全文
posted @ 2019-07-17 20:18 DAGGGGGGGGGGGG 阅读(196) 评论(0) 推荐(0) 编辑
摘要:"题目" 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题 阅读全文
posted @ 2019-07-15 20:12 DAGGGGGGGGGGGG 阅读(215) 评论(0) 推荐(0) 编辑
摘要:"题目" K短路的解法很多,其中比较简单拿到不少分的就是A 算法了。 这个题也是通过估价函数的优先级来确定K短路的。 假设估价为一条从起点到终点的路径的权值和。 将到达终点的路径都放入优先队列中,从优先队列中取出的第k个值就是k短路。 代码: c++ include include include 阅读全文
posted @ 2019-07-15 11:30 DAGGGGGGGGGGGG 阅读(530) 评论(0) 推荐(0) 编辑
摘要:SPFA和DIJ求最短路的算法的坑点一直是很多的。经常会让人搞不懂。 易错案例: 用重载运算符来排序,如: 这种做法是不对的,该dis值在堆里不会更新甚至会堵住。 正确案例: 目前只有两种优化算法最可靠,分别为优先队列来优化spfa或dij。 SPFA: 每次从堆中只需要取出到t的最短路最小的元 阅读全文
posted @ 2019-07-14 19:02 DAGGGGGGGGGGGG 阅读(530) 评论(0) 推荐(0) 编辑
摘要:"题目" 一道做法多种多样的题,DP做法的状态也很多。 我用dp[i]表示在第i秒发车的时间和,然后dp方程就很好写了 dp[i]=dp[j]+ij属于i 2m ~ i m。 然后i车的等待时间可以用前缀和来优化求出,虽然很慢,但是足以通过这道题了。 c++ includ 阅读全文
posted @ 2019-07-05 17:24 DAGGGGGGGGGGGG 阅读(198) 评论(0) 推荐(0) 编辑
摘要:"题目" 如果暴力的话,时间复杂度是rcC(n,n/2)2,主要考察搜索枚举行和列,并没有用到DP的思想。 考虑优化的话,发现枚举行或列中至少需要一步,因为这个题只能预处理优化,如果都不枚举,就相当于盲人摸象,无法预处理来优化。 因此要搜索枚举行或列,然后预处理并在列或行上跑DP,这样就可以 阅读全文
posted @ 2019-07-02 17:39 DAGGGGGGGGGGGG 阅读(223) 评论(0) 推荐(0) 编辑
摘要:"题目" 按理来说是可以二分的,但是发现其实直接暴力然后注意细节就可以了。 先找到牛所在的起点,然后分别向右找和向左找。 第一次查找从r点冲到l点时,突破不了l,从l点冲到r,能突破r,要给r加多少,然后取min,每次lr并不需要返回原先值,原因是l没有增加前 阅读全文
posted @ 2019-06-29 20:51 DAGGGGGGGGGGGG 阅读(163) 评论(0) 推荐(0) 编辑
摘要:"题目" 题意:求最小的从某一个点到其余点的切比雪夫距离和。 将一个图中的(x,y)坐标转到新坐标(x+y,xy)后,图中的曼哈顿距离就是新图中的切比雪夫距离, 证明:分类讨论, 1.x2x1,y2y1x2x1+y2y1=x2+y2(x1+y2)就是新坐标的X差。 2.$ 阅读全文
posted @ 2019-06-29 19:44 DAGGGGGGGGGGGG 阅读(125) 评论(0) 推荐(0) 编辑
摘要:"题目" 搜索+剪枝,主要考察细节和搜索的顺序,首先可以发现所有数据均为整数,所以初始化每层的蛋糕R和H是整数,然后从高层向低层搜索,然后预处理出各层向低层的最小面积和体积用来剪枝。 就可以每层从当前最大半径向最小半径枚举,并分类讨论加剪枝即可。 c++ include using namespac 阅读全文
posted @ 2019-06-28 17:39 DAGGGGGGGGGGGG 阅读(142) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示