摘要:
思路 \(n \leq 18\),一看就很状压。 设$f_{st,i}$为当前状态为$st$(二进制下第$x$位为$1$时表示选了第$x$个),最后一个选了$i$时的最大满意度(记录$i$是为了计算吃菜顺序的额外贡献),则有: $$ f_{st,i} = max(f_{pre,j} + a_i + 阅读全文
摘要:
思路 首先,我们根据题意建树,并给边附上权值:原有的边权值为$0$,反向边权值为$1$,代表走这条边所需代价。 第一次$DFS$,钦定$1$为根,我们可以求出以$1$为根的答案。 第二次$DFS$,考虑根由$u$转移到$v$时答案会怎么变。 若$u$到$v$的边权为$0$,那么一开始我们是从$u$到 阅读全文
摘要:
题意补充 事实上,$A$每次能染的$k$个节点并不一定与$B$所在节点相邻,换言之,$A$可以提前染一些节点使得$B$以后走不到。 数据范围:$1 \leq n \leq 300000$ 算法 二分答案 + 树形DP 思路 二分每次染的节点个数$k$,再用树形DP检查; 设$f_u$为以$u$节点为 阅读全文
摘要:
题意 中文题面,不再赘述 算法 树形DP + 贪心乱搞 思路 所有无法描述的正解都是贪心算法 不过这道题还是可以感性理解的 设$f_u$为以$u$为根的子树内最大毛毛虫的大小(尽管答案并不可以由它直接得出),则: $$ f_u = max(f_v) + 1 + min(siz_u - 1, 0) \ 阅读全文
摘要:
树形依赖背包 一般形式:给定一颗$n$个节点的点权树,要求选出$m$个节点使得这些选出的节点的点权和最大,一个节点能选当且仅当其父亲节点被选中,根节点能直接选。 一般解法: 用$f_{u,i}$表示在$u$的子树中选择$i$个节点(包括本身)的最大价值,转移方程为:\(f_{u,i} = max(f 阅读全文
摘要:
题意 合并一堆数,每次合并相加或相乘(题目已给出),设计合并顺序使得最终答案最大 其实就是一个区间DP 设$f_{i, j}\(为合并区间\)[i,j]$的最大价值 加法很好写:\(f_{i, j} = max_{k \geq i}^{k < j}{(f_{i, k} + f_{k + 1, j}) 阅读全文
摘要:
思路 看到是无向图最小环,考虑$Floyd$,但是$n^3$的复杂度太高了,怎么办? 观察题面,发现两个数只要与起来是$1$就有边,进而想到只要有一个二进制位有三个以上的数字是$1$,就能构成$3$元环。考虑最坏情况,即每个位都只有两个数为$1$,就有$64 \times 2=128$种,那么只要$ 阅读全文
摘要:
思路 显然,这题正着不太好推,那么就考虑二分答案,有一个很大的问题,我们需要在$O(n\log n)$或者$O(n)$的时间内判断我们二分答案的可行性。首先肯定想到贪心,但是你会发现每一个元素需要加的值不一样,加了值以后影响的范围也不一样,并不好维护。 因为涉及到区间修改,考虑使用线段树。我们维护每 阅读全文
摘要:
这题面不禁让我联想到了树剖 思路 显然,这道题并不需要树剖毕竟它只是蓝题,不过,它也需要用到$DFS$序,把树上操作转化成序列操作(这个思想可以说很套路了),但这题有一个麻烦的地方:在修改子树时每一条边都会对修改值造成影响,而这用线段树是难以维护的。 于是我们考虑将边上的影响分离出来,可以先预处理出 阅读全文
摘要:
前置芝士 $Dilwoth$定理$or$你已经做了导弹拦截 什么是$Dilworth$定理? 对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目. --百度百科 或许你可以通过这篇神的博客学习一下。 事实上,对于本题而言,所有的比分信息就是偏序集,而我们要求的就是最小链划分,即 阅读全文