zoukankan      html  css  js  c++  java
  • wombats

    学了二维决策单调性优化。

    把整个矩形从中间劈开,使用线段树维护。

    设f[l][r]为第l行->第r行的最短路径。可以发现f[l][r]的决策点(中间的点)随着l,r的递增而递增。

    原因是考虑路径。路径一定是不会交叉的,否则调整一下就会更优。

    有一种分治法可以求出,就是像一维决策单调性优化一样。但是多一个log

    然而这道题可以使用二维决策单调性优化。

    设p[l][r]表示[l,r]的决策点,则p[i-1][j]<=p[i][j]<=p[i][j+1]

    这样子把决策限定在了一个区间。

    实际上差分一下发现这样子时间复杂度是p[n-i+1][n]-p[1][i]这n个求和,这n个每部分都不会超过n,所以时间复杂度是O(n^2)

    但是这样子空间太大。在长度较小的时候可以使用另外一种dp

    设f[i]表示到第i个位置的最短路,p[i]表示到上一行这个位置的最短路。

    则f[i]=min(g[j]+abs(s[i]-s[j])),后面的是路径1~i的前缀和。

    把后面的绝对值拆开根据大小分类讨论,维护一个前/后缀min即可。

    这样子附加空间只有O(n)。就能过这道题。

  • 相关阅读:
    尘埃里的路人乙
    SlidingMenu 插件的使用 二
    观察者模式
    Android SlidingMenu插件的使用
    Android4.2 的Http 多线程 网络传输
    Sliverlight界面研究1
    Sliverlight界面研究2
    图片切换效果(定时+编号)
    管理模型 RACI模型
    Enable NLA in XP
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12983363.html
Copyright © 2011-2022 走看看