整理: 动态规划---相关优化


注意以下内容都是在我的认知范围内,有错误在所难免……
1.矩阵乘法优化,
具体一点地,比如当前dp状态是多维,
那么把后面几维装压变成一维,
比如f[i][j],而i=1~n,j=1~m,
把它写成f[i],i=1~n*m,对应转移。
假设压缩之后 f[i]=x[j]f[ipj]+T
pj 为某些值, x[j] 为系数,T为常数
如果压维度之后的f[i]满足:
(1)随着i的变化, x[j],pjT 的值不变化
(2)可以推固定不变的系数矩阵(其实(1)也是为了满足这个)
(3)可能要求f[n]而n非常非常大
那么一般就是矩阵乘法优化dp了。
时间复杂度转变为O( X3log(n) ),X为推出来的矩阵的边长。
……当然如果X过大也会GG的。

2.单调队列/斜率优化
考虑之前的决策如果 j<k<i ,是否有一些性质,
从这些性质里看可不可以出现单调性,
由此来维护值/斜率。
……这个感觉真没什么好讲的,用多了就熟练了。
如果还不太会,,其实我也不寄道NOIp会不会考,
所以百度扒=v=

3.数据结构/高级算法、数据结构(cdq,树套树,kd tree)
比较好用的,比如 f[i]=max{f[j]aj<=ai}+1
那么可以用线段树/平衡树/树状数组……花式维护,
因为只要消除 aj<=ai 的限制。
有时候可能会发现一重里又一重,就是维护不过来,
那有可能有另外的性质,可以考虑去找找;
也可能是高级题,需要用cdq这种同时维护多个条件。
主要是化简问题,归约问题。

4.决策单调性
这个还不太会,主要是找一些计算式的性质,
然后判断决策点有没有单调的移动性,就是当处理点后移,
取的决策点会不会也后移这种。
……只做了一题,这种性质题当然虚得要死。。
似乎用平衡树,整体二分这样的方法维护。
现在感觉平行四边形优化应该也是一种决策单调性吧。

猜你喜欢

转载自blog.csdn.net/ThinFatty/article/details/78491010
今日推荐