zoukankan      html  css  js  c++  java
  • 动态规划中的单调队列优化_补充

    以前写过一篇,要看的点此
    然而我要补充一下,我之前并不是太严谨。
    之前写的这篇,是可以从[x,i-1]的区间内转移到f[i](x与i有关,且单调递增)
    把范围扩大,单调队列能处理的方程类似于这样

    f(i)=maxj[x,y](g(j))+w(i)

    x,y单调递增(只和i有关),且y< i
    g[j]只和j有关,w[i]只和i有关

    具体做法

    设i表示你目前枚举到的点,j表示你将要放进单调队列的点(还没放进去)
    一开始j为第一个能转移的点(一般0或1)
    1. 若j+x<=i,将队尾比j劣的删掉,j入队,++j,继续循环;
    否则退出循环。
    2. 设队头为h,若h+y

    模板

    int i,j=0;
    for (i=1;i<=n;++i)
    {
        for (;j<i && where(j)<=i-x;++j)//第一步
        {
            while (head<=tail &&f[que[tail]]<=f[j])
                --tail;
            que[++tail]=j;
        }
        for (;head<=tail && where(que[head])<where(i)-y;++head);//第二步
        if (head<=tail)
            f[i]=f[que[head]]+w[i];//第三步
    }
  • 相关阅读:
    014 停止进程
    014 创建进程的函数使用
    014 进程 获取当前目录 获取当前文件搜在目录 获取环境变量
    013 Windows进程及线程
    012 CopyFile
    011 异步I/O处理 003
    010 异步I/O处理 002
    MVVM
    ORM
    MVC
  • 原文地址:https://www.cnblogs.com/jz-597/p/11145301.html
Copyright © 2011-2022 走看看