首页 > 其他分享 >Slope Trick

Slope Trick

时间:2023-02-24 10:25:00浏览次数:44  
标签:Slope 函数 凸性 转折点 Trick 斜率 维护 dp

定义

本质上是用一个二元组 \((S,f(x))\) 描述由一堆直线构成的分段函数去优化dp,要求这些分段函数满足凸性。其中 \(S\) 是一个可重集,\(f(x)\) 是一个一次函数。

我们定义转折点为斜率在它两侧忽然变化的点,那么 \(S\) 维护的是所有转折点的横坐标,\(f(x)\) 维护的是图像最右边无限延伸出去的直线的方程。考虑到这样无法描述斜率的具体变化,我们规定在一个转折点两侧斜率变化为 \(k\) 就将这个转折点加入 \(S\) \(k\) 次。容易发现这样可以唯一确定满足要求的一个分段函数。

例如 \(f(x)=|x-a|\) 就可以被 \((\{a,a\}, y=x-a)\) 表示。

注意到两个凸性相同的函数相加仍是具有凸性的,而我们发现这样表示函数具有良好的性质:\((S,f(x))+(T,g(x))=(S\cup T, f(x)+g(x))\),两个函数的和依然可以轻松被表示出来。注意到它要维护的信息只有转折点个数级别,我们可以用它来优化一些dp题。

example

例如:CF713C Sonya and Problem Wihtout a Legend

首先可以让 \(a_i-=i\) 使单调递增变成单调不降。

我们定义dp状态: \(f(i,j)\) 表示只考虑前 \(i\) 个数,所有数都小于 \(j\) 的最小次数, \(g(i,j)\) 表示只考虑前 \(i\) 个数,第 \(i\) 个数恰好等于 \(j\) 的最小次数。可以发现 \(g(i,j)=\min_{k\le j} f(i-1,k) + |a_i-j|\), 显然 \(g\) 是一堆凸函数相加满足凸性。\(f\) 是 \(g\) 的前缀最小值也是下凸的。

我们发现这个转移的代价是一个绝对值,是下凸函数。我们考虑维护由 \((j,f(i,j))\) 构成的一个函数。注意到加一个绝对值函数只会增加两个转折点,可以用之前的方法维护转折点。但是加入转折点之后我们维护的函数从 \((j,f(i,j))\) 变成了 \((j,g(i,j))\)。

这题有良好的性质,\((i,f(i,j))\) 在最后斜率一定会到 \(0\),\((i,g(i,j))\) 到最后斜率一定会是转到 \(1\)。并且 \(f(i,j)\) 只在最后一部分和 \(g(i,j)\) 不一样。我们只用改一下最后的函数值,移除最大的转折点就可以从 \(g\) 变到 \(f\)。实现只需要一个堆。

输出方案暂时不会,咕咕咕。

标签:Slope,函数,凸性,转折点,Trick,斜率,维护,dp
From: https://www.cnblogs.com/wwlwakioi/p/17150361.html

相关文章

  • Little Useless Trick
    记录一下近期收集到的没用的小\(trick\)。并查集合并树我们考虑去维护这样一种操作:1xy给\(x\)和\(y\)之间连一条无向边。2x询问\(x\)所在的连通块内点的......
  • Slope trick 学习笔记
    Slopetrick学习笔记概述Slopetrick是一种维护凸函数优化dp的方式。通过记录函数的转折点和最右段的一次函数,就可以表示出一个凸函数。一个转折点\(x\)表示在\(......
  • 树上匹配的小trick
    一棵树上有一些黑点和白点,将它们两两配对,配对\((i,j)\)的代价为\(dist(i,j)\),求最小代价。结论:将黑点的权值设为\(1\),白点的权值设为\(-1\),\(S_i\)为\(i\)子树的......
  • 中考物理trick1
    同压强不同密度减去相同高度,比密度\(\rho_Agh_A=\rho_Bgh_B\)同减去\(\Delta_h\)带入展开化简发现只需要比密度杠杆平衡减去同长度或同重力\(l_1F_1=l_2F_2\)姑且平......
  • 一个看起来比较有用的小 trick。
    ABC287Ex-DirectedGraphandQuery其实相当于分步加入点,构成点导出子图。Floyd维护联通性来判断。但是Floyd是\(O(N^3)\)的,非常慢。那么拿bitset维护就能优......
  • Trick 12:各种优美的暴力复杂度
    一些经典的\(\mathcal{O}(n\logn)\)复杂度的暴力美学:启发式合并:多个集合总大小为\(n\),每次合并两个集合并处理信息,若合并\(a,b\)的复杂度为\(\mathcal{O}(\min(......
  • Trick 11:区间 DP 杂题选讲
    大家好,下面讲的题目一个都不会,但是我脸皮很厚,所以分享给大家了。搁前面说一句:做题的时候能不能别丢掉这个算法啊!试一下啊!Pro.1P7914这是一个练手题。我们先来说说括号......
  • Trick 10:树论小知识
    关于树上的路径\(a_1\toa_2\toa_3\toa_4\to...\toa_n\)(\(a_i\)与\(a_{i+1}\)之间未必有边,路径可重复)的路径并处理问题如果我们面临多次询问,每次给你一堆......
  • 刷算法题的一些Trick
    1字符串的输入在读字符串的时候,一般建议这么写charstr[N];//字符数组scanf("%s",str);//因为str可以当作指针,所以不用&puts(str);字符串作为函数参数的时候......
  • 【文本分类】Bag of Tricks for Efficient Text Classification
    ·阅读摘要:  本文主要提出fastText模型。·参考文献:  [1]BagofTricksforEfficientTextClassification[0]摘要  文章提出fastText模型,效果接近深度学习基......