09 2018 档案

摘要:我们以一道题来引入吧! 传送门 题目说的很清楚,我们的数据结构要支持:插入x数,删除x数,查询数的排名和排名为x的数,求一个数前驱后继。 似乎用啥现有的数据结构都很难做到在O(nlogn)的复杂度中把这些问题全部解决……(别跟我说什么set,vector……) 所以我们来介绍一种新的数据结构——平衡 阅读全文
posted @ 2018-09-30 22:35 CaptainLi 阅读(1141) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题还是很简单的,可以树剖,然后还有看大佬暴力模拟AC的????!! 我们就执行俩操作,一个是单点修改,这个随便修,然后就是查询一个点,离他最近的被打过标记过的祖先。这个可以这么想,我们先query这个点所在链上的权值,如果>0就说明这条链上肯定是有至少一个被改过的点的。然后直接在区间之内 阅读全文
posted @ 2018-09-29 00:37 CaptainLi 阅读(208) 评论(1) 推荐(0) 编辑
摘要:传送门 这是一道非常好的背包题…… 我们发现,如果把每次上升和下降操作看为一件物品的话,那么实际上上升的操作对应的是一个完全背包模型,下降操作对应的是01背包模型。 这样的话就有了大致的思路了。我们用dp[i][j]表示从起始点到坐标为(i,j)的点所需要的最少触屏次数。设这一次上升高度为x[i], 阅读全文
posted @ 2018-09-29 00:32 CaptainLi 阅读(154) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题是网络流拆点的基本题,我们来说说网络流拆点。 首先,为什么要拆点?这道题中描述的是,一本书和一本练习册,一本答案正好组成了一套书册。也就是说其实每本书只能被用一次。如果我们用老套的网络流建图来做这道题的话,会发现一个神奇的事情,就是对于一个书点,可能有不只一条流流过了这个点,也就说明这 阅读全文
posted @ 2018-09-29 00:21 CaptainLi 阅读(300) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题还是标准的莫队……而且不带修改。 那就很简单啦!其余的莫队操作都没有变,之后对于每次指针的修改,我们相当于增加/减少一个C(x,2)的一个值,这样直接用莫队做即可…… 没什么难度的题……不过以后得记住莫队的指针先后顺序啊…… 看一下代码。 阅读全文
posted @ 2018-09-28 20:35 CaptainLi 阅读(101) 评论(0) 推荐(0) 编辑
摘要:传送门 好吧,是不是树剖板子做多了要挑战点难的……我们看看这道题吧! (好吧这题其实也就比板子难那么一点,至少给国集做是太简单了(^^)) 这道题就是代码特别长,好像咋写都要到5K左右。 还是老套的树剖起手,这题其实唯一麻烦的地方在于他有一个全部取相反数的操作,这个我们可以打上一个rev标记。然后每 阅读全文
posted @ 2018-09-28 01:01 CaptainLi 阅读(145) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题能看出来是DP。其实这个的状态还是比较好确定的,因为首先我们要从A串中选出一些非空不相交子串,而且他们还必须能按原来的顺序拼成B串,那么我们就知道在枚举到A串第i位,B串第j位的时候,A串前i位中选出的子串肯定是能匹配成B串前j位的。 于是乎我们就有了状态:dp[i][j][k]表示枚 阅读全文
posted @ 2018-09-28 00:44 CaptainLi 阅读(376) 评论(0) 推荐(0) 编辑
摘要:传送门 带修改莫队的板子题w 似乎还没有介绍过莫队是啥……莫队可是一种号称能解决一切序列问题的算法!以前国家队队长莫涛的名字命名。莫队是一种“优雅的暴力”,他的基本思想是分块,之后离线把询问分别在各个块内按照左右端点排序,用两个指针不断的扫,直到与目标区间重合。这样的话,左指针最多移动n次,而右指针 阅读全文
posted @ 2018-09-28 00:25 CaptainLi 阅读(160) 评论(0) 推荐(0) 编辑
摘要:传送门 终于有一道能够一次AC的Tarjan题啦! 这个题还是很简单的,首先Tarjan缩点,之后把新图建出来之后发现,因为要控制所有间谍,那么肯定得从入度为0的间谍下手,所以如果有任何入度为0的间谍不愿意被收买的话任务就失败了,否则的话直接topo排序统计答案即可。 图也许是不联通的,所以要用循环 阅读全文
posted @ 2018-09-28 00:02 CaptainLi 阅读(252) 评论(0) 推荐(0) 编辑
摘要:传送门 这个题听说是NOIP2017最难的题?反正我当时啥也不会爆零…… 首先我们看送的分,直接跑最短路计数有30pts。 之后就不会了hhhhh…… 我们仔细观察题目之后发现,这个题k的数据范围特别小,只有50,也就是说我们最多只会统计比最短路径长50的所有路径条数,那我们其实完全是可以这样DP的 阅读全文
posted @ 2018-09-27 23:58 CaptainLi 阅读(180) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题是个Tarjan+DAG上求最长路的好题啊……来说说我的智障做法。 首先这题很明显要缩点,这都没啥,然后我发现要求最长路? 好啊,直接找昨天学的那种,深搜!过了样例就交。 算法一,期望得分100,实际得分7. ???好的,发现这个算的是从一个点出发的最长路,我们要求的是终点还必须是酒馆 阅读全文
posted @ 2018-09-27 23:42 CaptainLi 阅读(149) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题也是很简单的树剖啊……(虽然说大佬们都用了什么树上差分……但是这题暴力树剖真能过) 其实N = 300000有点卡nlog^2n,不过这题数据好像比较水还是能过的。 直接用树剖维护,每次走过一条路径就把上面所有的点值全部++,最后输出每个点被走过多少次即可。 不过这里就有了BUG!我们 阅读全文
posted @ 2018-09-27 00:38 CaptainLi 阅读(113) 评论(0) 推荐(0) 编辑
摘要:传送门 这个题还是树剖的基本练习,不过线段树维护的东西复杂了一些。 还是树剖起手,之后我们要在线段树中维护当前区间内颜色个数,最靠左的颜色和最靠右的颜色。这样的话我们在合并的时候,如果左区间最靠右颜色和右区间最靠左颜色是相同的话,那么这个合并之后的区间的颜色个数要-1(因为原来计算的方法是左右两区间 阅读全文
posted @ 2018-09-27 00:30 CaptainLi 阅读(138) 评论(0) 推荐(0) 编辑
摘要:传送门 最近学了树剖我们来做几道题练练手。 这个题我觉得也是板子题啊…… 反正就是对于一个安装操作,就在它自己所在链向上跳,如果当前链顶已经被安装的话计算一下从这个点到链顶还有多少没被安装即可。每次向上跳的时候都要把经过的链上的点全改为1.至于卸载操作就更简单了,直接先统计自己子树内有多少节点值为1 阅读全文
posted @ 2018-09-27 00:24 CaptainLi 阅读(179) 评论(0) 推荐(0) 编辑
摘要:什么是可持久化数据结构呢? 简单一点来说,就是能支持访问以往某个版本的数据的数据结构,当然我的总结并没有那么贴切…… 我们以这样一个事来引入吧!记得上学期的时候上数学课学统计,听辉哥在上面讲课,我在下面突然想到,能否写一种数据结构,能够快速访问每一个给定区间的中位数是多少? 考虑最暴力的做法就是每次 阅读全文
posted @ 2018-09-24 18:45 CaptainLi 阅读(2219) 评论(0) 推荐(1) 编辑
摘要:传送门 开始总结一下树剖!树剖好像大概两个月前就接触了……当时没怎么听懂,也许是底子太差了。这段时间多练了练树形DP之类的,现在觉得非常好理解。 树链剖分,简单的来说就是把树拆成链分别维护,以降低维护的复杂度。 首先要说一下,树剖本身并不是什么难的东西,其实只要两遍dfs,至于代码为什么特别长,那是 阅读全文
posted @ 2018-09-24 00:20 CaptainLi 阅读(315) 评论(0) 推荐(0) 编辑
摘要:传送门 我们看一下这个题的要求。首先就是我们只可以买一次,卖一次,而且我们还必须得到达终点,那我们不妨进行两遍最短路,第一次计算从起始点开始到所有点能买物品的最低价格(用dis[i]表示),第二次计算从终点到所有点能卖物品的最高价格(用dis1[i]表示)。这样两遍跑一次然后结果就是max(dis1 阅读全文
posted @ 2018-09-21 14:27 CaptainLi 阅读(157) 评论(0) 推荐(0) 编辑
摘要:传送门 给定一个n元一次方程组求解。 首先我们思考一下,自己解普通的二元一次方程组的时候是怎么解的? 我们肯定是要先用一个变量表示另一个变量,换句话说,先进行消元,然后转变为一元一次方程求解。 我们一般有两种做法,加减消元或者带入消元。(这里以二元一次方程组为例,多元的也一样) 但是我们在使用程序计 阅读全文
posted @ 2018-09-21 14:16 CaptainLi 阅读(279) 评论(0) 推荐(0) 编辑
摘要:传送门 Manacher算法是解决回文串长度计算的利器。 优秀的算法大多起源于暴力的思想……我们一步一步来看。 首先思考最暴力的情况怎么匹配?枚举所有区间然后判断是不是回文串,时间复杂度O(n^3). 之后我们考虑优化一下。因为回文串的左右是相同的,所以我们不妨可以枚举回文串的中点,之后向两边依次拓 阅读全文
posted @ 2018-09-21 13:46 CaptainLi 阅读(136) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题看起来十分的不可做……可能是我数学太差智商太低了orz。 首先如果一个人的家和办公室在同一侧那就完全不用考虑,把结果记下来就行。 然后我们先考虑k=1的情况。因为只能建1座桥,那么我们发现(除去过桥一个单位长度不算)答案就是sigma(abs(ai-x) + abs(bi-x)),其中 阅读全文
posted @ 2018-09-20 18:00 CaptainLi 阅读(127) 评论(0) 推荐(0) 编辑
摘要:传送门 这题的思路还是很清晰的,就是把图建出来之后用tarjan缩点,之后在DAG中用DP(或者说dfs)求出最长路就可以啦。 不过事情是不会像想象中那么简单的。 这个题目的图在建立的时候非常麻烦……首先我们不可能挨个枚举,这样复杂的最坏到O(n^2),建图都已经T了就没什么可做的了。 所以我们考虑 阅读全文
posted @ 2018-09-20 15:41 CaptainLi 阅读(155) 评论(0) 推荐(0) 编辑
摘要:传送门 一道非常好的DP。看这个可能会觉得与01背包很像,不过这个的问题在于现做的菜肴会影响到后面的菜肴的价值。 我们在进行01背包DP时,一件物品的价值是不随着其被枚举的位置改变而改变的,但是这道题中不行。假设你现在有两种菜肴,你先做第一种会导致第二种的价值受损,反之第一种的价值就会受损,我们并不 阅读全文
posted @ 2018-09-20 15:12 CaptainLi 阅读(219) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题的题目描述看起来很奇怪。实际上的意思是要求在这个有向图之内能到达的点对有多少,解释一下题里的图片就是(1,1),(1,2),(1,3),(1,4),(1,5),(2,2),(2,3),(2,4),(2,5),(3,3),(3,4),(3,5),(4,4),(5,5)一共14个。 先小声 阅读全文
posted @ 2018-09-20 15:04 CaptainLi 阅读(265) 评论(0) 推荐(0) 编辑
摘要:传送门 一道神奇的DP………(鬼知道他为什么在tarjan里面) 一开始可能会考虑贪心或者什么其他神奇的算法,不过还是DP比较靠谱。 我们用f[i]表示摧毁所有i左侧的炸 药包最少需要的能量,用g[i]表示摧毁所有i右侧的炸 药包最少需要的能量。 那么我们只要找到满足j < i,a[i] - a[j 阅读全文
posted @ 2018-09-20 14:48 CaptainLi 阅读(794) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题还是比较容易看出是tarjan的。首先我们知道如果学校之间成环的话那么学校之间一定能到达,直接缩成一个点就好了。 缩完点之后我们得到了一个DAG。之后因为子任务A要求的是最少接受新软件的学校有多少个,可以很容易的想出我们只要给所有入度为0的学校发一份就可以了,因为剩下的必然是可以从其他 阅读全文
posted @ 2018-09-20 14:39 CaptainLi 阅读(119) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题既然说的是有一个矿点崩塌……那么也就是在图中去掉这个点和这个点所连的所有边,那也就是割点了。 那我们先手把图建出来之后把图中所有的割点都跑出来,这样图中会剩下一堆联通块。之后我们考虑一下对于每个联通块必须建立的逃生点个数。 如果一个联通块不与任意一个割点相连,那么我们需要在里面建两个逃 阅读全文
posted @ 2018-09-18 20:41 CaptainLi 阅读(179) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题一开始可能以为是二分图匹配……?不过后来发现和二分图没啥大关系。 简单分析之后发现,把夫妻之间连边(男性向女性连边),之后再将每对曾经是情侣的人连边(女性向男性连边),当然以上的方向可以反过来不过两次连接方向必须相反。这样的话如果婚姻是危险的那么这些就是在一个强连通分量里面的。换句话说 阅读全文
posted @ 2018-09-18 20:32 CaptainLi 阅读(324) 评论(0) 推荐(0) 编辑
摘要:传送门 ovo这题该怎么做呢?我们首先考虑暴力建图,但是因为建图的操作太多直接就会MLE,所以这个就别想了…… 我们考虑如何优化建图。因为发现一个点可以向一个区间连边,一个区间也可以向一个点连边,想到区间很容易想到线段树……所以我们可以使用一个点来代替一段区间进行建图。 具体的操作可以这样,我们建立 阅读全文
posted @ 2018-09-18 20:19 CaptainLi 阅读(232) 评论(0) 推荐(0) 编辑
摘要:T1.rotate 【问题描述】 ZYL有N张牌编号分别为1, 2,……,N。他把这N张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多。如果第i个位置的牌的编号为i,我们就称之为固定点。旋转可以被认为是将其中的一个子段旋转180度,这意味着子段的第一张牌和最后一张牌交换位置,以及第二张牌 阅读全文
posted @ 2018-09-16 23:59 CaptainLi 阅读(816) 评论(0) 推荐(2) 编辑
摘要:传送门 我们来看一道比较可做的树形DP。 现在这个数据规模的树形DP都是可以直接n3暴力转移过掉的呀…… 不过这个状态比较特殊,我们用dp[i][j]表示i节点在子树中保留j个节点所需要删去的最小边数。 那么转移方程就是,dp[i][j] = min(dp[i][j],dp[i][j-k] + dp 阅读全文
posted @ 2018-09-15 00:17 CaptainLi 阅读(206) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题好神奇啊……如果要是不带修改的话那就是普通的点分治了,每次维护子树中距离次大值和最大值去更新。 不过这题要修改,而且还改500000次,总不能每改一次都点分治一次吧。 所以我们来认识一个新东西:带修改的点分治,动态点分治! 它可以强势解决带修改点分治问题(但是这玩意真的太难了我这个菜鸡 阅读全文
posted @ 2018-09-14 23:49 CaptainLi 阅读(206) 评论(0) 推荐(0) 编辑
摘要:传送门 仍然是大规模解决树上路径的问题。 显然是点分治,但是因为我太菜了想不到应该怎么点分治,还是借鉴dalao的经验才想出来。 我们用tmp[i]表示在当前子树中,经过长度为i的路径最少需要几条边。那么转移的方程就是tmp[m] = tmp[m-dis[i]] + d[i],其中m是要求的路径长度 阅读全文
posted @ 2018-09-14 22:41 CaptainLi 阅读(173) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题看起来是大规模解决树上路径的问题……那就是点分治啦。 既然我们要求的是树上长度为3的倍数的路径有多少条,那么我们不妨对每条路径的长度取模,这样的话我们实际上就获得了一堆长度为0,1,2的路径。因为点分治的性质,它每次只统计当前子树内经过重心的长度为3的倍数的路径,所以我们在每次统计之后 阅读全文
posted @ 2018-09-14 22:19 CaptainLi 阅读(126) 评论(0) 推荐(0) 编辑
摘要:啥是点分治? 点分治一般来说用于解决大规模的树上路径问题。比如说最经典的一道题,给定一棵树,计算一共有多少点对满足之间距离<=k。 这种题一般数据范围在10^4~10^5,直接暴力求是n^2的肯定会超时。 那怎么办?我们考虑分治。 先说一下点分治的基本思想,就是对于每一棵树,先找到这棵树的重心。 啥 阅读全文
posted @ 2018-09-14 00:26 CaptainLi 阅读(191) 评论(0) 推荐(0) 编辑
摘要:传送门 这是一道神奇的树形DP,对它还是不需要建树,而且完全可以一边读入,一边DP出结果…… 首先我们看题目描述很显然是一棵二叉树,而且还是完全二叉树。(没啥卵用) 令dp[i][j]表示在第i个节点选取花费j时间所能获取的最大画数。 之后因为题目的输入是递归给出的……所以我们直接去建图难度很大,不 阅读全文
posted @ 2018-09-12 20:34 CaptainLi 阅读(188) 评论(0) 推荐(0) 编辑
摘要:传送门 又是熟悉的遍历题……好了又不会了。 这是一道很神奇的题,虽然可以称为树形DP但是它不需要建树! 首先,因为中序遍历每个连续的一段都对应一棵子树,所以我们完全可以使用区间DP的方法去把小区间合并成大区间来计算。 使用dp[i][j]表示区间i,j之内(也就是一棵子树)的最高加分。特殊的,dp[ 阅读全文
posted @ 2018-09-12 20:24 CaptainLi 阅读(112) 评论(0) 推荐(0) 编辑
摘要:传送门 仍然是一道标准的树形DP。 我们其实不必纠结到底剩余的钱数是多少,那并不重要,我们只关心其是否大于0。而且我们其实要求的是能连接的最大用户数。 用dp[i][j]表示在第i个节点连接了j个客户的最大利润。那么得到: dp[i][j] = max(dp[i][j],dp[i][j-k] + d 阅读全文
posted @ 2018-09-12 20:16 CaptainLi 阅读(172) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题是典型的树形DP。 因为我们发现有一条性质,那就是对于一根枝条,你选择了它的话你也必须同时选择从这根枝条到根的所有枝条。 我们使用dp[i][j]表示对于第i个节点,保留j根枝条所能获得的最大苹果树,那么就有: dp[i][j] = max(dp[i][j],dp[i][j-k-1] 阅读全文
posted @ 2018-09-12 20:09 CaptainLi 阅读(264) 评论(0) 推荐(0) 编辑
摘要:传送门 这题什么玩意……提示说这是个平衡树题,不过一来我没看出这是平衡树,二来我早忘了怎么写平衡树了。 我想到的是用线段树解决。前两个摧毁和重建的操作都只需要进行单点修改,而第三个操作,我的想法就是找到这个点左边最靠右的一间被摧毁的屋子和右边最靠左的一间被摧毁的屋子。 我们把所有点的权值一开始设成1 阅读全文
posted @ 2018-09-12 19:53 CaptainLi 阅读(171) 评论(0) 推荐(0) 编辑
摘要:传送门 这题咋做呀……?一开始我的想法贼啦复杂也没法实现(实际就是不会) 后来看了dalao的想法之后明白了,如果在给定前后序的情况下中序遍历出现不同的情况,那么必然是树中有一些只有一个儿子的节点(因为这样树就是不定型的) 每出现这样一个节点,结果就会×2。 那我们还要去建树递归求只有一个儿子的节点 阅读全文
posted @ 2018-09-12 19:31 CaptainLi 阅读(177) 评论(0) 推荐(0) 编辑
摘要:传送门 一道很简单的树形DP。 树形DP是啥?看名字就知道是在树上进行DP。树形DP的不同在于,对于一个节点,他的状态必然是由其子节点而不是其他节点转移过来的。 树形DP有啥技巧我也说不清……直接来几道题看看吧。 首先看这道题。这题就是要求在树中选取一棵子树,使得其权值和最大。 DP过程还是很显然的 阅读全文
posted @ 2018-09-12 19:23 CaptainLi 阅读(643) 评论(0) 推荐(0) 编辑
摘要:传送门(又是一道很水的题) 这题我竟然还使用了类似线段树的思想……就是先递归到最底下一层之后读入,然后依次向递归返回更新答案。 感觉没啥可说的……直接看代码吧。 阅读全文
posted @ 2018-09-12 19:15 CaptainLi 阅读(201) 评论(0) 推荐(0) 编辑
摘要:这里说一道很水的题…… 通过后序遍历和中序遍历求前序遍历。 首先说一下这都是什么遍历方式……(蒟蒻已经全忘了) 简单地说,前序遍历就是访问根节点->左子树->右子树 中序遍历就是访问左子树-根节点-右子树 后序遍历则是访问左子树-右子树-根节点(当然以上规则是对于二叉树适用) 这样的话,我们就可以通 阅读全文
posted @ 2018-09-12 19:12 CaptainLi 阅读(558) 评论(0) 推荐(0) 编辑
摘要:传送门 最近搞一搞树型结构……毕竟自己树的知识学的太垃圾了。 首先这道题非常明显要求树的直径。树的直径有好多好多种求法,这里我选择了一位dalao的非常简洁的dfs的方法。先看一下代码。 代码非常的简短。具体的思想也很好理解,就是依次向下dfs,然后使用fa来记录在直径上都有哪些点。不过这个使用的时 阅读全文
posted @ 2018-09-12 19:04 CaptainLi 阅读(170) 评论(0) 推荐(0) 编辑
摘要:传送门 ovo原来简单版的非常的好做,只要肆意暴力枚举即可。 不过这道题的数据范围变成了200000,即使是洛谷神机也跑不过去的。 于是乎我们考虑分治法。 对于一个平面上的所有点,我们设其属于一个点集S。我们想要把点集S尽可能平均的分成两个点集,那么我们只要每次取当前点集中所有点的中位数进行分割即可 阅读全文
posted @ 2018-09-07 23:28 CaptainLi 阅读(1413) 评论(2) 推荐(3) 编辑
摘要:传送门 非常有趣的状压DP。(对反正我自己又没想出来) 因为猪的数目非常的少,还是能想到状压DP。之后,因为首先小鸟都是从原点发射的,所以我们只需要两只猪就可以确定一条抛物线。 既然如此,我们就可以枚举每一对猪,计算出来抛物线的解析式,之后,因为有的时候一条抛物线可以砸死不只一只猪,所以我们可以再枚 阅读全文
posted @ 2018-09-07 22:16 CaptainLi 阅读(257) 评论(0) 推荐(0) 编辑
摘要:这道题的DP非常的有意思…… 一开始我们总是会以为这是一个背包问题,直接dp[0] = 0,dp[j] += dp[j-c[i]]进行转移。之后统计一下从dp[m-minn]~dp[m]的答案之和为结果。 其中minn指花费最小的那个物品的花费。不过这样是会丢解的。因为统计的过程我们只统计了不选最小 阅读全文
posted @ 2018-09-07 22:03 CaptainLi 阅读(214) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题一开始的暴力做法就是直接模拟之后用dij跑最短路。其实它的极限值还没到1e8不过有常数你还是会超时。 上面的暴力能得60分。 之后我们考虑正解,因为数据范围是200所以我们可以直接跑Floyd。不过问题是我们怎么在一张不是完整的图上更新距离。 Floyd算法的本质是动态规划,其转移方程 阅读全文
posted @ 2018-09-07 16:27 CaptainLi 阅读(196) 评论(0) 推荐(0) 编辑
摘要:传送门 ovo这题没有靠谱的多项式复杂度的做法?! 好吧我也不知道该怎么做,于是学了一个大佬的Floyd玄学算法。 具体的实现还是很简单的,就是每次使用Floyd更新,必须要满足以下情况: 1.当前三个点文化不互相排斥 2.通往k(用于更新的点)的道路上所经过的文化与当前文化不互相排斥 3.距离更小 阅读全文
posted @ 2018-09-07 15:30 CaptainLi 阅读(170) 评论(0) 推荐(0) 编辑
摘要:传送门 当时NOIP考试的时候我不会,现在我还是不会。 因为数据范围很小所以能猜到是状压DP。不过平时我们状压DP都是在一个矩阵里面状压DP,不过这次因为我们要打通所有的宝藏屋,那么肯定最后打通的时候通路是一棵树,我们也就是相当于在树上DP。 首先我们先说一种非常强势的做法,状压DP+dfs!(不过 阅读全文
posted @ 2018-09-07 15:21 CaptainLi 阅读(727) 评论(0) 推荐(0) 编辑
摘要:传送门 这题感觉还是与什么炮兵阵地之类的很相似的……不过首先看一眼数据范围,100?这怎么状压都状压不下,再者,一个炮要考虑一整行/列,直接暴力枚举肯定做不到。 那怎么办?首先很显然每行/列最多只能放两个炮。之后因为我们这道题首先不会统计你一共放多少个炮,二来统计的是方案数……看过dalao的题解之 阅读全文
posted @ 2018-09-07 14:59 CaptainLi 阅读(150) 评论(0) 推荐(0) 编辑
摘要:这题考试的时候并没有想出来……还是自己太弱了。 当时的想法是如何找到一条最短而且经过点最多的路,之后就一直卡在这上面出不来了…… 但后来发现并不需要这样,因为我们要求的是……路径长和经过点数的比值,所以我们可以选择在原图中跑spfa或者dij,每次走到一个新的点,就把当前点数设置为转移过来的那个地方 阅读全文
posted @ 2018-09-07 14:39 CaptainLi 阅读(503) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题是数位DP的入门题。 什么是数位Dp?简单来说,数位DP就是用于解决在一个给定区间之内,有多少个数满足条件的一种DP。其中数的多少和数的大小无关,而与数的结构有关。我们先计算出来[0,r]中符合条件的数,再计算出[0,l-1]中符合条件的数就可以。 以这道题为例,其实在数位之间DP是很 阅读全文
posted @ 2018-09-07 14:33 CaptainLi 阅读(203) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题还是很明显的状压DP。毕竟数据范围很小。 然后此题和前面的互不侵犯,炮兵阵地这两道题还是非常相似的。我们使用dp[i][j]表示枚举到第i行,当前行状态为j的方案数,之后直接向下一行转移就可以啦。 然后因为这道题要求的是方案数,而且并没有要求种多少草,所以没有必要记录一共有多少块草,直 阅读全文
posted @ 2018-09-07 14:18 CaptainLi 阅读(116) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题一开始看没什么头绪……之后觉得不妨把骑士向自己痛恨的那个人连一条边,那么我们好像就转化成了一个取父亲就不能取儿子这么一个操作。 非常的像那个没有上司的舞会。 不过这题有一些bug,就是在一些联通块中可能存在环。不过我们仔细想一下之后会发现,因为每个点的出度都是1,所以如果骑士之间的厌恶 阅读全文
posted @ 2018-09-05 15:01 CaptainLi 阅读(110) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题看数据范围n<=10可以很快的想出是状压DP。 之后最暴力的方法也是可以想到的,就是直接暴力枚举当前行,上一行,上上行的情况(因为炮兵能打两行),直接暴力DP。 不过这样一来会T,二来会MLE。 那我们怎么办?我们注意到一个炮兵能打到左右两格,说明在一行之内有很多情况都是不可行的,根本 阅读全文
posted @ 2018-09-05 14:44 CaptainLi 阅读(229) 评论(0) 推荐(0) 编辑
摘要:传送门 DP找给定区域内最大符合条件的矩形/正方形。这里有一种新的方法———悬线法。 悬线的定义:每个点(i,j),都对应一条悬线,当前点是悬线的下端,悬线的上端为一个障碍点或者矩形的上边界。 所以一个符合条件的矩形,我们只要使用悬线法计算出这条悬线移动到不合法位置时的边界即可。 (注意left和r 阅读全文
posted @ 2018-09-05 14:37 CaptainLi 阅读(141) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题当时看了一会觉得是DP……甚至连状态都想出来了,但是因为数学太差不知道怎么转移。 按照DP的思路想,我们很容易想到用dp[i][j]表示枚举前i个教室,其中换了j个教室所耗费的最小体力值。一开始这么想后来发现根本没法转移……因为我们是需要知道上一次的教室的,于是再加一维0/1,表示当前 阅读全文
posted @ 2018-09-04 14:58 CaptainLi 阅读(443) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题当时有一瞬间想到是二分图匹配……因为我们必须保证每次攻击的前一次都是当前值-1,能想到是匹配,可是看到数据范围是10^6,当时就觉得的这不可能是二分图匹配。 不过这题还真是二分图匹配…… 它的匹配方法不大一样,因为一个装备有两个属性,所以我们可以想到把每个装备都向它的两个属性值连边,之 阅读全文
posted @ 2018-09-04 14:42 CaptainLi 阅读(149) 评论(0) 推荐(0) 编辑
摘要:传送门 听说这是一道树形DP,不过我不知道怎么DP,我只想出来了dfs的做法。 原题可以转化成一棵树,从给定的根节点到所有的叶节点,问要把这些路径的长度设成同一个值最少要更改多少次。 我们考虑之后发现,肯定是在深度比较低的边上做修改,使得最后的修改次数比较少,不过如何确定要修改多少次呢?我们可以先递 阅读全文
posted @ 2018-09-04 14:25 CaptainLi 阅读(145) 评论(0) 推荐(0) 编辑
摘要:这次没传送门了……题目懒得copy上来。 T1.高维宇宙 这题很明显是二分图匹配,题目中明确说了要配对。 我一开始的建图方法是有问题的,因为违背了二分图的一个性质,就是在同一个点集中的点是互相不能连边的。那么如何解决这个问题呢?我们知道任何一个大于2的质数必然是奇数,所以我们可以把所有的奇数作为一个 阅读全文
posted @ 2018-09-02 23:13 CaptainLi 阅读(173) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题是经典的区间DP。因为它要求有每两个相邻的石子堆合并,所以很显然对于区间[l,r]内的情况,我们只要枚举端点k,之后把这左右两端的石子合并取最大/小即可。 之后,这题是环形怎么破?显然不需要枚举开头……直接把数组开成原来二倍长就可以。之后每次在取答案的时候只要计算一段长度为n的就可以了 阅读全文
posted @ 2018-09-01 23:39 CaptainLi 阅读(345) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题的思路还是很好想的,就是维护一个差分数组,这样可以很容易的在O(n)的时间内计算出每天要的教室的数量。 之后的问题在于……怎么求最早的不符合要求的订单呢? 那就是老套路啦,二分答案! 先判断一下所有的都加上可不可行,如果不可行,我们二分那个不合法订单的编号,把所有在它之前的都加上,并且 阅读全文
posted @ 2018-09-01 23:34 CaptainLi 阅读(141) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题就是一道不大容易被看出来的二分图匹配……(也可能是我太菜了qaq) 首先我们看一下,题目要求我们把对角线上都填满。我们把每一行和每一列都抽象成一个点,那么我们只要让每一行和每一列都匹配上就可以。 先把每行向源点连边,每列向汇点连边,行和列之间,如果g[i][j]是1的话那么就把第i行和 阅读全文
posted @ 2018-09-01 23:18 CaptainLi 阅读(149) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题原来是可以用莫队暴力过掉的……但是数据加强之后500000万的范围使得nsqrtn的算法无法通过,那我们只能用log的方法,也就是树状数组。 本题要求我们统计的是贝壳的个数,我们唯一的困难在于如何判断重复元素。考虑这样一个事情,对于一些右端点相同的区间,我们在统计这些区间之内的情况的时 阅读全文
posted @ 2018-09-01 22:24 CaptainLi 阅读(140) 评论(0) 推荐(0) 编辑

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