随笔分类 - 各种DP
摘要:传送门 首先涂区间,那么区间最多有 2n2n 个相邻位置不同的情况,并且连续相同的颜色可以合并起来 那么这样操作完以后,区间长度最多为 2n 发现涂完一段区间以后其他的操作都不能出现一边在区间内而另一边在区间外的情况 又因为区间长度 n<=1000 ,时间 6 秒,考虑一下不满的 $n^
阅读全文
摘要:传送门 看一眼感觉就是 dp,但是似乎状态太多了 考虑推推性质 首先每到一行都要把所有宝藏都走到,那么一定会走到最左边的和最右边的宝藏 注意到一旦走完所有宝藏时肯定是在最左边或者最右边的宝藏位置 并且此时要往上走,显然是选择左边或右边的最近的路上去,因为如果选择更远的路上去还不如先上去再走到更远
阅读全文
摘要:传送门 显然直接 AC 自动机上数位 dp 一下 预处理出 f[i][j] 表示当前匹配到 AC 自动机上的节点 j ,再放 i 个位的数字后不冲突的方案数 初始时 f[0][j]=1 ,其中 j 不是匹配节点(匹配节点显然指的是本身是某个模式串的结束节点或者 $fa
阅读全文
摘要:传送门 这个题一眼 dp 就是设 f[i][0/1] 表示我们只考虑前 i 个位置,并且保证覆盖了前 i 个位置,当前位置 选/不选 的最小代价 考虑转移,设题目给出的字符串为 s 首先 f[i][0] 必须从 f[j][1] 转移过来,其中 $ j+k>=i \text
阅读全文
摘要:传送门 注意到题目给的条件,序列初始只有 −1,0,1,猜一下最终的数列在最优情况下也都是 −1,0,1 证明也挺显然吧,如果一个数初始为 −1 ,并且前面一个数是正数,那么这个正数为了让 −1 变成大于等于它的数,不论如何都必须操作两次 如果一个数初始为 0 ,那么要变成大于等
阅读全文
摘要:传送门 看到方程感觉比较奇怪,变一下: 注意到 3x=(x<<1)+x 那么 x xor ((x<<1)+x)=(x<<1) 左右同时异或 x ,得到 (x<<1)+x=(x<<1) xor x 因为 xor 是不进位的加法 发
阅读全文
摘要:传送门 容易想到 dp,但是如果直接设 f[i][j] 表示修正完前 i 个位置,第 i 个位置增加了 j 高度显然是不行的 考虑有性质,发现每个位置只会被左右两个位置影响而改变,即如果一边等于它那么才要考虑增加它的位置,并且如果此时另一边恰好比它原本高度大 1,这个位置才要
阅读全文
摘要:传送门 首先对于 b>0 的工作显然有个贪心,把 b>0 的按 a 从小到大排序 把能做的都做了,然后得到一个最大等级 剩下就是考虑 b<0 的工作了,看到数据显然可以 O(nr) 考虑 dp,设 f[i][j] 表示考虑完前 i 个工作,当前等级为 j 时能完成
阅读全文
摘要:传送门 这是一道英语题,首先要读懂题目: Alex believes that his trip will be interesting only if he will not use any road twice in a row. 这句话意思是不会连续走一条路,但是同一条路是可
阅读全文
摘要:传送门 首先考虑到放一个棋子以后少掉的哪一行一列我们可以直接忽略,把被切开的四个部分重新拼成一个矩形 所以状态就只要考虑当前有几行几列,放了哪些棋子,考虑同一种颜色的一起放 设 f[i][j][k] 表示放完前 i 种颜色的棋子,剩下 j 行 k 列空着 那么转移直接枚举这一种颜色占
阅读全文
摘要:传送门 就是个普及组 dp 合集,把 NOI 从左到右拆成 9 个部分,每个部分都可以分别 dp 除了 N 的中间部分比较恶心以外其他都还好,自己推一下然后就知道转移,就 N 的中间优化转移比较不好写 随便吧,反正 9 个 dp 都挺简单的,量变导致质变,我在想那一年
阅读全文
摘要:传送门 注意到 a 的值的数量并不大,考虑状压 dp 设 f[S] 表示此时确定的数集合为 S ,且按某种顺序从数列开头排列完成的最小交换次数 那么每个状态枚举最后一个填的数,加上代价后,取最小值即可 现在最大的问题是,代价怎么算...??? 注意到我们每次交换相邻的两个数,这两个数
阅读全文
摘要:传送门 发现 n 很小,考虑状压 dp,但是如果强行枚举列并枚举置换再转移复杂度太高了 考虑推推结论,发现我们只要保留列最大值最大的 n 列即可,证明好像挺显然: 假设我们让列最大值比较小的列贡献给某一行,那么由抽屉原理发现这意味着列最大值排名前 n 的某一列一定没对答案贡献, 此时
阅读全文
摘要:传送门 考虑把 sum 值相同的一起用快速幂计算 枚举 sum=i ,然后可以用数位 dp 求有多少小于 n 的二进制下恰好有 i 个 1 的数的个数 注意不要把个数取模,因为个数是幂次
阅读全文
摘要:传送门 这一题看一眼就是 dp,发现限制是在右边,不妨把数列反过来,这样限制在左边比较舒服 然后显然地设 f[i] 表示位置 i 强制放守卫时控制 [1,i] 的最小费用 那么转移直接枚举上一个守卫 j,因为之间放置木偶的花费为 $1+2+...+(i-j-1)=(i-j-1)(
阅读全文
摘要:传送门 一眼基环树森林上面搞搞 dp 本来如果是颗树,直接设 f[x][0/1] 表示节点 x 不选/选 时子树的最大价值 因为有环,所以设 f[x][0/1/2] 表示节点 x 不选/选且有非环上儿子控制/选且没非环上儿子控制 时非环上子树的最大价值 对环上每个节点往子树内跑一
阅读全文
摘要:传送门 统计每条边被最短路经过几次,点数不大,考虑计算以每个点为起点时对其他边的贡献 对于某个点 S 为起点的贡献,首先跑一遍最短路,建出最短路的 DAG 考虑 DAG 上的某条边被以 S 为起点的最短路经过的方案数,设此边为 (u,v) ,那么方案数就是 S 到 u 的
阅读全文
摘要:传送门 看到数据范围,显然 n2 的 dp... 设 f[i][j] 表示 A 串考虑了前 i 位,B 串考虑了前 j 位,最优情况下的方案数 但是好像没法判断转移来的是否为最优方案? 所以再设 g[i][j] 表示 A 串考虑了前 i 位,B 串考虑了
阅读全文
摘要:传送门 先考虑如何判断无解,设 sum[i] 表示确定的人中,编号大于 i 的人的人数 如果 sum[i]>n−i+1 则无解,进一步考虑设 f[i][j] 表示当前确定完编号大于等于 i 的人,除去原本固定的人还有 j 人已经确定 那么有 $f[i][j]=\sum_{k=
阅读全文
摘要:传送门 把所有人按 ai 从小到大排序, ai 越小说明如果那个人说真话,分数越高 对于 ai 相同的人,如果 bi 不同那么最多只有一种 bi 是真的,所以考虑把 ai,bi 相同的合并,价值为人数 进一步考虑,对于 ai 不同的人,他们同时说真话的条件
阅读全文