随笔分类 - dp
摘要:HDU - 6086 前缀和后缀分别建AC自动机, 考虑从两端往中间dp dp[ o ][ i ][ j ][ mask ] 表示放了前面和后面o个, 第一个自动机在 i 位置, 第二个自动机在 j 位置, 拥有的目标串的状态是mask的方案数。 对于跨过两端的东西, 我们最后处理就好了。
阅读全文
摘要:Fedor Runs for President 考虑 一棵基环树, 只有对应在基环上同一点的点对是一条路径。我们目标是使一条路经的数目尽可能少。 dp[ u ] 表示从下延伸上来的一条最优链。 但是在当前这个点 u 作为交汇点的时候, 需要从它儿子中选两个 合起来得到最优值, 这个需要用斜率去优化
阅读全文
摘要:Painting Square 转换一下变成 a 层的完全四叉树, 占领 k 个点有多少种方案, 点能被占当且仅当它的父亲被占。 a <= 30, 所以我们把每层都dp出来, dp[ i ][ j ] 表示 i 层完全四叉树占领 k 个点的方案数。
阅读全文
摘要:Shaass the Great 枚举删掉的边, 我们考虑如何将两个团连起来最优, 显然这是两个独立的问题, 两个团内分别选一个最优点连起来就好了。 用每条边的贡献取计算答案, 然后用树形dp去计算连在那个点最优, 考虑改变连接点改变所带来影响就不难写出dp了。 嗯嗯恩。。 好像又写麻烦了, 直接找
阅读全文
摘要:An unavoidable detour for home 首先明确的一点是从前往后dp, 因为有dis[ i + 1 ] >= dis[ i ] 这个条件存在。 然后我先就考虑将顶点一个一个填进去, 但是发现需要开六七个50乘起来的数组才能维护。 我发现有一个条件还没有利用起来, 就是每个点到
阅读全文
摘要:Mausoleum 考虑将数字从大到小一种一种填进去, 新加入的数字只会在之前组成序列的两侧, 所以形状一直是连续的一段。 dp[ k ][ i ][ j ] 表示填入了前 k 大的数字, 它们位于i - j 的合法方案数, 转移的时候check一下能否转移。
阅读全文
摘要:用类似于数位dp的方式, 去求每个数字的贡献。。 好像我写得巨麻烦。 其实转化一下之后, 有很好写的方法。
阅读全文
摘要:Two Melodies dp[ i ][ j ] 表示当前到处理完前 i 个, 其中一个子串最后一位时 i , 另一个子串最后一位是 j 的最大值。 随便维护一下就能转移了。
阅读全文
摘要:Levko and Strings 感觉怎么复杂度都不对。。 没想到暴力转移复杂度是对的, 好菜啊。
阅读全文
摘要:Cutlet 写出转移方程式, 发现能用单调队列优化, 写起来比较麻烦。
阅读全文
摘要:Legen... 我们能很容易写出在AC自动机上的dp, dp[ k ][ i ][ j ]表示走了 k 步从 i 走到 j 的最大值。 k 很大我们考虑矩阵优化, 直接搞就好啦。 不知道为什么在本机上M * M * M * M **** * M 打多了就会卡死不知道为什么。。。
阅读全文
摘要:Erasing Substrings 感觉这种写法想不到啊。。。 dp[ i ][ j ] 表示选了 i 个, 删了的情况为 j 是否为字典序最小的串。 因为如果dp[ i ][ j ] 的字典序比 dp[ i ][ k ]的字典序小, dp[ i ][ k ] 就没有用了。 还需要sos dp 去
阅读全文
摘要:Crisp String 显然我们只要知道每个状态合不合法我们就能解决这个问题。 两两枚举相邻的字符, 去找不合法状态。
阅读全文
摘要:Bear and Destroying Subtrees 我们先考虑没有修改的到从根开始的最长期望深度。 dp[ i ][ j ] 表示 i 这棵子树所有的边有一半概率存在的情况下, 最长深度为 j 的概率。 我们只用考虑50层就够了, 因为概率随长度比边长成指数级减少。 这样的话,处理出一个 dp
阅读全文
摘要:Dreamoon and Binary 先预处理出从i 开始 和 从 j 开始的lcp, 然后直接dp
阅读全文
摘要:Igor and Interesting Numbers 枚举每一位, 用dp去算方案数。
阅读全文
摘要:Beautiful Matrix 首先枚举哪一位分出大小, 然后计算比它小的方案数有多少种。 方案数 = 当前行的方案数 * 下面所有行的方案数。 如果下面还有x行, 那么下面所有行的方案数为 g ^ x, g 为全错排的方案数, 当前行的要预处理出f[ i ][ j ] f[ i ][ j ] 表
阅读全文
摘要:dp[ i ][ j ] 表示在 i 这棵子树中, 距离 i 最远点的距离为 j 的方案数。 转移应该挺显然的把, 记一下mxd[ u ] 表示 u 这颗子树的最大深度, 然后两个for套在一起复杂度就对了。
阅读全文
摘要:Superhero's Job 首先要看出来是个积性函数, 我这个都没看出来, 我好菜啊。 看出来之后随便dp一下就好了。
阅读全文
摘要:首先肯定是将老鼠和洞都排好序, dp[ i ][ j ] 表示处理了 前 i 个洞, 进去 j 只老鼠的最小距离和, 很明显处理先处理靠前的老鼠。 然后观察一下这个dp, 发现它满足决策单调性, 然后直接上了个分治, 然后 T 了。 然后继续观察了半天, 发现对于, dp[ i - 1 ][ 0 ]
阅读全文

浙公网安备 33010602011771号