随笔分类 -  dp

摘要:Gifts 感觉题解写的就是坨不知道什么东西。。 看得这个题解。 阅读全文
posted @ 2019-04-15 15:05 NotNight 阅读(275) 评论(0) 推荐(0)
摘要:Game with Strings 题意并不是在图上走,看了好久才看出来。。 dp[ i ][ mask ]表示从 i 层开始走,起点有mask个, a的个数-b的个数的 最大值或者最小值。 阅读全文
posted @ 2019-04-12 20:23 NotNight 阅读(108) 评论(0) 推荐(0)
摘要:Sereja and Sets 我们先考虑对于一堆线段我们怎么求最大的不相交的线段数量。 我们先按 r 排序, 然后能选就选。 所以我们能想到我们用$dp[ i ][ j ]$表示已经选了 i 个线段, 最后一个被选的线段的右端点是 j 的方案数。 对于dp[ i ][ j ] -> dp[ i + 阅读全文
posted @ 2019-04-12 17:28 NotNight 阅读(163) 评论(0) 推荐(0)
摘要:Summer Practice Report dp[ i ][ 0 ]表示放完前 i 页, 第 i 页最后一段是 0, 0个数的最小值。 dp[ i ][ 1 ]表示放完前 i 页, 第 i 页最后一段是 1, 1个数的最小值。 这个转移细节有点多。。。 阅读全文
posted @ 2019-04-12 16:41 NotNight 阅读(177) 评论(0) 推荐(0)
摘要:Liar 刚开始感觉只要开个dp[ i ][ j ][ 0 / 1 ]表示处理了s的前 i 个用了 k 段, i 是否是最后一段的最后一个字符 的 t串最长匹配长度, 然后wa24, 就gg了。感觉这个转移感觉很对, 但是实际上不对。。。 比如s = ababcde, t = abcde, x = 阅读全文
posted @ 2019-04-12 14:05 NotNight 阅读(292) 评论(0) 推荐(0)
摘要:码就完事了。 阅读全文
posted @ 2019-04-07 16:20 NotNight 阅读(161) 评论(0) 推荐(0)
摘要:The Chocolate Spree 对拍拍了半天才知道哪里写错了。。 dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来。 阅读全文
posted @ 2019-04-02 11:52 NotNight 阅读(147) 评论(0) 推荐(0)
摘要:Two Merged Sequences 感觉是个垃圾题啊, 为什么过的人这么少。。 dp[ i ][ 0 ]表示处理完前 i 个, 第 i 个是递增序列序列里的元素,递减序列的最大值。 dp[ i ][ 1 ]表示处理完前 i 个, 第 i 个是递减序列序列里的元素,递增序列的最小值。 然后随便转 阅读全文
posted @ 2019-04-01 00:21 NotNight 阅读(536) 评论(0) 推荐(0)
摘要:刚开始, 我以为两个点肯定是通过树上最短路径过去的, 无非是在两棵树之间来回切换, 这个可以用倍增 + dp 去维护它。 但是后来又发现, 它可以不通过树上最短路径过去, 我们考虑这样一种情况, 起点在奇树里面, 终点在偶树里面, 然后这两个点最短路径里面点到对应点的距离都很大, 这种情况下我们就需 阅读全文
posted @ 2019-03-27 12:12 NotNight 阅读(344) 评论(0) 推荐(0)
摘要:Adam and Tree 感觉非常巧妙的一题。。 如果对于一个已经建立完成的树, 那么我们可以用dp[ i ]表示染完 i 这棵子树, 并给从fa[ i ] -> i的条边也染色的最少颜色数。 mnson[ i ][ 0 ] 和 mnson[ i ][ 1 ]分别表示 i 的儿子的dp值的最大和第 阅读全文
posted @ 2019-03-26 13:04 NotNight 阅读(234) 评论(0) 推荐(0)
摘要:第一次看到这种骚东西, 期望还能二分的啊??? 因为存在重置的操作, 所以我们再dp的过程中有环存在。 为了消除环的影响, 我们二分dp[ 0 ][ 0 ]的值, 与通过dp得出的dp[ 0 ][ 0 ]的值进行比较。 这样看着好像很不合理, 但实际上比较这两个值, 你能推倒出当前二分的值合不合法。 阅读全文
posted @ 2019-03-23 22:54 NotNight 阅读(170) 评论(0) 推荐(0)
摘要:Steps to One 啊, 我要死了, 这种垃圾题居然没写出来, 最后十分钟才发现错在哪。 不知道为什么我以为 对于一个数x , 除了它的因子和它的倍数都是和它互质的, 我脑子是抽了吗? 随便瞎dpdp的题。。 还熬夜打cf好暴躁啊啊啊。 我求我自己以后打比赛多动动脑子。 阅读全文
posted @ 2019-03-22 12:00 NotNight 阅读(443) 评论(0) 推荐(0)
摘要:第一次知道这种背包还能退的。。。。 我们用dp[ i ]表示选取若干个物品重量到达 i 的方案数。 如果我们g[ i ]表示不用第 x 个物品的, 然后选若干其他的物品到达 i 的方案数。 if(i < cnt[ x ]) g[ i ] = dp[ i ] else g[ i ] = dp[ i ] 阅读全文
posted @ 2019-03-21 17:12 NotNight 阅读(207) 评论(0) 推荐(0)
摘要:我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数。 我们能得到dp方程 dp[ i ] = sum(dp[ i - j - 1 ] * comb(i - 1, j) * F[ j ]) 0 <= j <= k - 1, 然后会发 阅读全文
posted @ 2019-03-20 12:54 NotNight 阅读(273) 评论(0) 推荐(0)
摘要:Bear and Bowling 4 这也能斜率优化。。。 max[ i ] = a[ i ] - a[ j ] - j * (sum[ i ] - sum[ j ])然后就能斜率优化啦, 我咋没想到, 我好菜啊。 斜率优化最重要的是转换成前缀形式, 我TM又忘了。 阅读全文
posted @ 2019-03-16 12:52 NotNight 阅读(185) 评论(0) 推荐(0)
摘要:Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导。。。 感觉有这个误导之后很难往dp那个方向靠。。 dp[ k ][ i ][ j ]表示把 i, j 这个区间分成 k 段, 所有段的最大值的最小值为多少。 阅读全文
posted @ 2019-03-15 17:09 NotNight 阅读(153) 评论(0) 推荐(0)
摘要:感觉这个题挺有意思的, 我们可以将 L = lcm(1, 2, 3, ... , 8) 看作一组。 然后用dp[ i ][ j ]表示到第 i 种物品当前的值为 j 能用L的最大数量。 阅读全文
posted @ 2019-03-12 19:03 NotNight 阅读(263) 评论(0) 推荐(0)
摘要:一直在考虑, 每一段的贡献, 没想到这个东西能直接dp。。因为所有的h都是一样的。 阅读全文
posted @ 2019-03-11 18:19 NotNight 阅读(218) 评论(0) 推荐(0)
摘要:小G砍树 dfs两次, dp出每个点作为最后一个点的方案数。 阅读全文
posted @ 2019-03-11 13:13 NotNight 阅读(230) 评论(0) 推荐(0)
摘要:Bacterial Melee 我们发现所有合法串都是原序列的某个子序列(这个子序列相邻元素相等) 的扩展, 比如子序列为abc, 那么aabbbc, abbbcc 等都是合法串。 所以我们只需要dp出原串有多少相邻元素不同的子序列就好啦。 阅读全文
posted @ 2019-03-11 00:40 NotNight 阅读(292) 评论(1) 推荐(0)