上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 16 下一页
摘要: 单调队列优化dp 我们将每个人的s值排序,这样我们就能保证当前这个人刷的木板一定在上一个人之后,我们就能进行线型dp 定义f[i][j]表示前i个人刷前j个木板获得的最多报仇,那么有 在dp过程中,我们假定外层变量i为定值,当j增大时,不难发现k的取值范围上界不变,下界变大。我们不妨比较一下两个决策 阅读全文
posted @ 2019-06-07 20:42 AD_shl 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 我们定义f[i][j]表示前j个数组成的长度为i的合法序列的个数,那么有 因此我们不难写出朴素dp的代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using nam 阅读全文
posted @ 2019-06-07 15:25 AD_shl 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 线型dp+线段树优化 我们定义f[i]表示覆盖[L,i]的最小代价,我们将牛按照r递增排列,假设当前牛为[ai,bi],代价为vali 那么存在 我们在状态转移时,每次需要查询区间内的最值,同时f数组发生更新,因此我们可以用线段树的查询、修改在较快时间内维护f数组。 同时我们注意一下边界的处理即可。 阅读全文
posted @ 2019-06-06 23:44 AD_shl 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 记忆化搜索的经典例题 一个显然的想法,直接枚举每一个点作为起点然后dfs,求出最大值。显然这种做法一定会TLE,我们不妨进行一下优化:由于每一个点会被重复搜索,我们不妨进行记忆化,当这一个点搜索完成后,我们记下从这个点出发的最优解。下次搜索到这个点时我们就可以O(1)返回答案,这样搜索效率大大提高, 阅读全文
posted @ 2019-06-02 10:54 AD_shl 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 动态维护中位数的题目。 我们采用对顶堆做法,建立一个大根堆存储前半段序列(排序后),小根堆存储后半段序列,通过维护两个堆使得他们元素个数之差不大于1 ,这样这个序列的中位数就是大根堆的堆顶。 关于如何维护对顶堆:如果两个堆元素个数差大于1,我们就把大根堆的堆顶放到小根堆当中(或是把小根堆堆顶放到大根 阅读全文
posted @ 2019-06-02 10:32 AD_shl 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 树的直径的模板题 我们存图以后,对这张图(树)进行一次dfs,定义sum1表示从当前节点向他的儿子走的最长路径是多少,sum2表示次长路径是多少。我们每次先用当前路径的长度+当前路径前往的节点的sum1更新当前节点的sum2,如果更新后sum2大于sum1,那么我们交换他们的数值,不难发现这样是正确 阅读全文
posted @ 2019-06-01 21:02 AD_shl 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 好像跟POJ重题 这是一道扫描线的题。 由于窗口的大小已知,我们不妨换一下思路,把问题转化成这样:平面内有若干个矩形(大小就是窗口的大小,矩形左下角的位置就是某一颗星星的位置),每一个矩形覆盖的区域都有一个权值(星星的亮度),求某一位置,使得这个位置被覆盖的权值最大,最大值即答案。 为什么这样就是正 阅读全文
posted @ 2019-06-01 17:04 AD_shl 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 线段树扫描线的应用 我们尝试设想有一条无限高的竖线左往右扫过这个并集图形,按照每一个矩形的的左右边界,我们可以将这个并集图形分为2n 段,对于两两相邻的部分,我们可以分别计算面积,这样就得到了整个并集图形的面积。 如图,我们就是把每个矩形的左右边界提了出来,就变成了这样一些线段。 那么我们需要这些量 阅读全文
posted @ 2019-05-31 23:34 AD_shl 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 线段树+状压 在线段树上维护一个值表示这个区间的颜色,具体地讲,我们将这个区间的颜色进行状压,第1种颜色对应状压后的第1位,以此类推。这样我们维护的这个数就是状压之后的数,在合并区间时将两个数按位或即可,区间取值直接覆盖即可,最后我们统计答案时只需统计这个数有多少个1即可。 1 #include < 阅读全文
posted @ 2019-05-26 10:58 AD_shl 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 做完这道题,我只想说:爽啊! 这道题的难点在于我们要支持区间赋值、区间翻转、区间最长子序列、区间求和这几种操作。 我们建一棵线段树,维护以下信息:sum区间1的个数max[0/1]区间内0/1最长连续子段lmax[0/1]包含区间左端点最长0/1子段rmax[0/1]包含区间右端点最长0/1子段鉴于 阅读全文
posted @ 2019-05-25 20:11 AD_shl 阅读(257) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 16 下一页