• arc063f


    按照题意设f[i]表示前i个点的最大收益,g[i]表示后i个点的最大收益。

    显然:

    f[i]=max(f[i-1],f[j]+frac{(i-j)(i-j+1)}{2}-s[i]+s[j])

    拆开括号变成f[i]=max(f[i-1],f[j]+frac{i*2-2*ij+i-+j^2-j}{2}-s[i]+s[j])

    把斜率设成ij,容易发现是个斜率优化的标准形式,使用栈维护半平面交。

    g同理可得也可以斜率优化。

    设第i个点不变时的收益为h[i],则转移方程枚举包含i的极大区间,得到:

    h[i]=max(f[l]+g[r+1]+frac{(i-j)(i-j+1)}{2}-s[r]+s[l])

    考虑分治,设当前区间为[l,r],中点为md。

    设p[i]表示以i为左端点,右端点的范围为(md,r]的最大收益。

    则p[i+1]=max(f[i]+g[j+1]+frac{(i-j)(i-j+1)}{2}-s[j]+s[i])(j=mid+1~r)

    拆开括号,变成p[i+1]=max(f[i]+g[j+1]+frac{i*2-2*ij+i-+j^2-j}{2}-s[j]+s[i])(j=mid+1~r)

    也是个标准的斜率优化形式,使用栈维护半平面交。

    实际上,p[i]可以被它包含的h(感受一下),反之h[i]可以被p[l]...p[i]更新。

    所以应该从小到大做。

    设q[i]表示以i为右端点,左端点的范围为[l,md]的最大收益。

    转移也类似。

    综上所述,枚举当前点x是否选择,则答案为max(f[x-1]+g[x+1],h[x]+y[x]-y)

    y为当前点权值。

  • 相关阅读:
    saveField方法
    cake使用事务的方法
    css 中引用css的方法
    一次标准的关联查询
    try cath用处
    使用其他模型分页$data = $this>paginate('MerchantProductOrder');
    jquery 常用代码
    php 邮箱验证原理
    cake 分页一个典型的条件
    一次典型的查询
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13047604.html
Copyright © 2020-2023  润新知