dp
决策单调性
前提:满足四边形不等式
若
i<a<b<j
w(i,b)+w(a,j)<w(i,j)+w(a,b)
相当于决策点是不降的。
把序列分成k段,每段的价值为
w(i,j)
ex:和的平方
dpi,k=min(dpj,k−1+w(j,i)).
知道了dp有决策单调后,可以分治
solve(l,r,optl,optr)
求出
mid=l+r>>1的opt(for一遍),然后递归下一层。同时这个东西在每一层支持莫队一样的统计方式,强行把指针跳到想要的位置。
然而这个做法需要上一层用来转移的都算出来了,,,,
如果是形如
fi=min(fj+w(j,i))的方程
可以用单调栈,栈中存每个决策点决策的段,每次出现一个新的决策点,和栈顶的元素二分找位置。
斜率优化
一般写成
dpi=min/max(aj+bj∗ci)+di
首先不管
di,把(
bj,
aj)看成平面上的点。撞到点时在y轴上的截距就是这个点的贡献,拿一条斜率为-
ci的线从下往上移动,第一个撞到的就是最小值。显然这些点只会在下凸壳上,找出下凸壳可以二分找点。
图论
冷知识== dag的反图dfs出栈序列是一个合格的拓扑序列
一个拓扑序要求1最靠前,再让2最靠前,等价于反图最大字典序
每个正则二分图(所有点度数相同)都有完美匹配
霍尔定理:对于一个二分图对于左边任意一个点集,出边点集的siz>=点集大小,那么这个图有完美匹配。