随笔分类 -  动态规划-普通

摘要:题目 点这里看题目。 分析 其实是一道比较套路的题目。一开始就并不那么容易想到如下的 DP: 设 fi,j 表示第 i 次滋水时,当前若处在 j 位置,可能受到的最小伤害。转移还是比较显然: \[ f_{i,j}= \begin{cases} \min_{j-T_{i} 阅读全文
posted @ 2021-09-05 16:24 crashed 阅读(180) 评论(0) 推荐(2) 编辑
摘要:题目 点这里看题目。 分析 这种问题我们通常可以考虑合法染色方案的等价条件。 一步简单的转化是,将染色看成删除。此时要求就是,如果删除一个孤立的格子且不是最后一个格子,那么其它连续段的两端的颜色必须全部不同于当前格颜色。 基于此,对于合法的染色方案,我们可以尝试构造删除方案: 除了最后一个被删除的段 阅读全文
posted @ 2021-02-01 21:56 crashed 阅读(90) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 设 fk(n) 表示经过了 k 次操作之后 n 的期望。 这里有一个很重要的性质:f 是积性函数。 事实上,每次操作就相当于是对 n 的每一个质因子 pi 的指数 ki 随机替换为 [0,ki] 中的 阅读全文
posted @ 2020-12-03 15:27 crashed 阅读(73) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 首先,不难发现此题可以方便地建出网络流的图来。图中的每个节点向周围四个点连一条容量为 1 的无向边,然后 S 连向红色接口, T 连向蓝色接口。 原题的答案便是此图上的最大流。显然原问题没法做,我们直接上最小割。 最小割本质上就是要将点拆分成两个点集。为了 阅读全文
posted @ 2020-10-13 21:21 crashed 阅读(155) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 这种题目显然需要转化。 考虑我们该怎么枚举区间。由于操作顺序是从前到后的,因此可以想到将一段操作区间拆分成两段操作的后缀。 那么,如何实现操作的 " 减法 " 呢?也就是说,我们应如何消去另一后缀的影响? 注意到,如果我们同时对 st 执行操作的话, 阅读全文
posted @ 2020-09-24 20:54 crashed 阅读(149) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 NOI 里面也有我会做的题目? 显然不能把 T 放到状态里面,于是考虑用活动作为状态。 f(u,i):第 i 个活动开始的时候,位于 u 城市的最大愉悦值。 转移如下: \[ f(u,i)=\max_v\{f(v,i-1)+g(v,u,t_ 阅读全文
posted @ 2020-08-21 11:44 crashed 阅读(227) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 离线的话,我们显然可以 线段树分治 + DP ,时间复杂度大概是 O(mlog2m+mp) 。 不过,既然题目明确要求在线,却还不开强制在线,我们就应该去思考一下在线算法。 显然我们需要一个 DP 去维护答案,这里不再赘述。 考虑我们直接处理的难点之一是双端队 阅读全文
posted @ 2020-08-09 16:48 crashed 阅读(282) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 本题有很多直接构造伪光滑数的做法,这些去网上搜一搜就好了。 这里讲一个很暴力但又很有意义的做法。 考虑到限制的特殊性,需要知道指数和,我们可以写出下面这个状态: f(i,k):最大质因子刚好为 pi ,指数和为 k 的数集,此时应有 \(k\le 阅读全文
posted @ 2020-08-06 22:22 crashed 阅读(154) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 以下标记子串的方法为: S[l,r] 表示 S 中从 lr 的字符组成的子串。用 ( 表示开区间, [ 表示闭区间。 我们不难想到一个 DP : f(i,k):以 i 开始的后缀,结尾字符串长度为 k 时的最长 阅读全文
posted @ 2020-08-04 12:02 crashed 阅读(138) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 奇奇妙妙的题目。 直接修改树上的路径会影响到很多条边,并不方便处理。我们需要压缩受影响信息的数量。 由于对点的处理更加灵活,因而我们考虑将边权转为点权。 考虑修改树上路径经常与树上差分挂钩,我们可以猜想第一种方法:给点赋权为它到根上所有边的权的异或和。 但是没有什么用,因 阅读全文
posted @ 2020-07-28 16:50 crashed 阅读(171) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 出题人已经开始拿高精作为考点了吗 0pts ~ 24pts 数据太小,小到你甚至很难想到专门对付这些部分分的算法。 36pts 这应该是一个经典的问题, USACO 曾经考过类似的题目。 思想很简单,既然我们要求分出来的段单调递增,我们就把每一段的两个端点都放到状态里面。 阅读全文
posted @ 2020-07-24 18:48 crashed 阅读(275) 评论(0) 推荐(0) 编辑
摘要:题目 比赛界面。 T1 数据范围明示直接O(n2)计算,问题就在如何快速计算。 树上路径统计通常会用到差分方法。这里有两棵树,因此我们可以做“差分套差分”,在 A 树上对 B 的差分信息进行差分。在修改的时候,我们就会在 A 上 4 个位置进行修改,每次修改会涉及 B 上 4 个位置的差分修改 阅读全文
posted @ 2020-06-13 21:59 crashed 阅读(209) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 先特判掉K=2的情况。 首先可以考虑到一个简单 DP : f(i):前i张牌的最大贡献。 转移可以O(n2)地枚举区间众数,但它不存在决策单调性,众数查询也很难优化。 考虑另一种转移。我们对于f(i),只取它结尾的点数的后缀 \(f(i)=\ma 阅读全文
posted @ 2020-06-06 23:44 crashed 阅读(170) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 由于这个问题与子串相关,那么我们就先把后缀自动机给建出来。 题目条件非常特殊——“出现至少两次”。而 fail 树上一个状态的祖先状态,根据定义,至少会在当前状态中出现一次。我们便可以知道,答案所对应的状态在 fail 树上一定呈祖孙关系。 我们可以用倍增法,求出状态 \ 阅读全文
posted @ 2020-05-30 22:32 crashed 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 第一步,考虑转换一下题意。 设a[i]为任意字符串的第i个字符(从1标号)。对于两个在原题中要求相等的串——siski+1。令l=|si|n=|S|si[1]=S[p](位置对应)。则: \(s_i=S[p]S[ 阅读全文
posted @ 2020-05-30 11:04 crashed 阅读(159) 评论(0) 推荐(0) 编辑
摘要:题目 "点这里" 看题目。 分析 首先对于模式串建立 AC 自动机,并且计算出每个状态p的贡献总和con(p)。 考虑一个朴素的 DP : f(i,p):当前串长度为i,匹配到p上的最大答案。 设在p后加入字符c会转移到t(p,c), DP 的转移如下: $$f(i+ 阅读全文
posted @ 2020-05-18 14:06 crashed 阅读(133) 评论(0) 推荐(0) 编辑
摘要:题目 "点这里" 看题目。 分析 首先不难发现答案具有单调性,因此可以二分答案。答案上限为V=2m×max{ai,bi}。 考虑如何去判断当前的答案。设这个答案为mid。 我们可以将一块三角形拼图看做一个向量,表示在这个拼图内走过的位移。因此我们的叠放的拼图可以看做一 阅读全文
posted @ 2020-04-24 23:00 crashed 阅读(306) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 首先不难想到一个网络流的做法。 新建源点 S 和汇点 T 。对于每个点 i ,连接 (S,i) ,流量为 pi ;连接 (i,T) ,流量为 si 。对于 i<j ,连接 (i,j) ,流量为 \ 阅读全文
posted @ 2020-04-12 17:10 crashed 阅读(128) 评论(0) 推荐(0) 编辑
摘要:题目 点这里看题目。 分析 不难发现,设两人取得的下标集合为SaSb,那么符合要求的下标集合对需要满足SaSb对应的值全部异或起来为 0 。 因此,我们可以考虑异或为0的下标集合S,它对答案的贡献就是2|S|。 根据这个思想,我们可以考虑如下的 DP : 阅读全文
posted @ 2020-03-29 18:14 crashed 阅读(131) 评论(0) 推荐(0) 编辑

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