18十一正睿笔记

dp

决策单调性

前提:满足四边形不等式
i < a < b < j i<a<b<j
w ( i , b ) + w ( a , j ) < w ( i , j ) + w ( a , b ) w(i,b)+w(a,j)<w(i,j)+w(a,b)
相当于决策点是不降的。

把序列分成k段,每段的价值为 w ( i , j ) w(i,j)
ex:和的平方
d p i , k = m i n ( d p j , k 1 + w ( j , i ) ) . dp_{i,k}=min(dp_{j,k-1}+w(j,i)).
知道了dp有决策单调后,可以分治
s o l v e ( l , r , o p t l , o p t r ) solve(l,r,opt_l,opt_r)
求出 m i d = l + r > > 1 mid=l+r>>1 的opt(for一遍),然后递归下一层。同时这个东西在每一层支持莫队一样的统计方式,强行把指针跳到想要的位置。
然而这个做法需要上一层用来转移的都算出来了,,,,
如果是形如 f i = m i n ( f j + w ( j , i ) ) f_i=min(f_j+w(j,i)) 的方程
可以用单调栈,栈中存每个决策点决策的段,每次出现一个新的决策点,和栈顶的元素二分找位置。

斜率优化

一般写成 d p i = m i n / m a x ( a j + b j c i ) + d i dp_i=min/max(a_j+b_j*c_i)+d_i
首先不管 d i d_i ,把( b j b_j , a j a_j )看成平面上的点。撞到点时在y轴上的截距就是这个点的贡献,拿一条斜率为- c i c_i 的线从下往上移动,第一个撞到的就是最小值。显然这些点只会在下凸壳上,找出下凸壳可以二分找点。

图论

冷知识== dag的反图dfs出栈序列是一个合格的拓扑序列
一个拓扑序要求1最靠前,再让2最靠前,等价于反图最大字典序
每个正则二分图(所有点度数相同)都有完美匹配
霍尔定理:对于一个二分图对于左边任意一个点集,出边点集的siz>=点集大小,那么这个图有完美匹配。

猜你喜欢

转载自blog.csdn.net/MTS_ZX/article/details/82932146