随笔分类 - 斜率优化
摘要:维护由若干点(x, y)构成上凸包,并支持求给定一个斜率k的求通过某个点截距的最大值, 需保证 x 递增, 询问 k 递减是用query,否则用query2, 单次log(n), 判断需要用到叉积, 注意是否会爆掉LL。 namespace CH { struct Point { LL x, y;
阅读全文
摘要:The Fair Nut and Rectangles 很裸的斜率优化呀。 维护直线 维护凸包
阅读全文
摘要:Fedor Runs for President 考虑 一棵基环树, 只有对应在基环上同一点的点对是一条路径。我们目标是使一条路经的数目尽可能少。 dp[ u ] 表示从下延伸上来的一条最优链。 但是在当前这个点 u 作为交汇点的时候, 需要从它儿子中选两个 合起来得到最优值, 这个需要用斜率去优化
阅读全文
摘要:Bear and Bowling 4 这也能斜率优化。。。 max[ i ] = a[ i ] - a[ j ] - j * (sum[ i ] - sum[ j ])然后就能斜率优化啦, 我咋没想到, 我好菜啊。 斜率优化最重要的是转换成前缀形式, 我TM又忘了。
阅读全文
摘要:Levels and Regions 把dp方程列出来, 把所有东西拆成前缀的形式, 就能看出可以斜率优化啦。
阅读全文
摘要:我们先把问题分成两部分, 一部分是把元素往前移, 另一部分是把元素往后移。对于一个 i 后的一个位置, 我们考虑前面哪个移到这里来最优。 我们设最优值为val, val = max(a[ j ] * (i - j) - (sum[ i ] - sum[ j ]) 我们能发现这个能转换成斜率优化的形式
阅读全文
摘要:Cats Transport 出发时间居然能是负的,我服了。。。 卡了我十几次, 我一直以为斜率优化写搓了。 我们能得出dp方程式 dp[ i ][ j ] = min(dp[ k ][ j - 1 ] + hs[ i ] * (cnt[ i ] - cnt[ j ]) - sum[ i ] + s
阅读全文
摘要:C - Kalila and Dimna in the Logging Industry 很容易能得到状态转移方程 dp[ i ] = min( dp[ j ] + b[ j ] * a[ i ] ), 然后斜率优化一下。 一直以为炸精度了, 忽然发现手贱把while 写成了if 。。。。
阅读全文
摘要:思路:先把没有用的土地去掉,然后按照x轴排序,容易得到dp转移方程 dp[ i ] = min{ dp[ j ] + b[ j + 1 ] * a[ i ] } 0 <= j < i 典型的斜率优化。
阅读全文