斜率优化

Posted lhm-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斜率优化相关的知识,希望对你有一定的参考价值。

优化形如(f_i=min/max(f_j+a_i×b_j+c_i+d_j)(j< i))(DP)方程

设存在两个决策点(j,k),且决策点(j)比决策点(k)更优,例如为取最小值时,得

(f_j+a_i×b_j+c_i+d_j<f_k+a_i×b_k+c_i+d_k)

(-a_i(b_j-b_k)>(f_j+d_j)-(f_k+d_k))

(-a_i>frac{(f_j+d_j)-(f_k+d_k)}{b_j-b_k})

我们就得到了该(DP)方程所对应的(x)(b_j)(y)(f_j+d_j),斜率为(-a_i)

通过这样的方式也就可以推出其他方程的(x,y)和斜率

仓库建设中,(DP)方程为(f_i=f_j+dis_i×(p_i-p_j)-(s_i-s_j)+c_i)

其所对应的(x)(p_j)(y)(f_j+s_j),斜率为(dis_i)

(code:)

double x(int i)
{
    return p[i];
}
double y(int i)
{
    return f[i]+s[i];
}
double slope(int j,int k)
{
    return (y(j)-y(k))/(x(j)-x(k));
}

......

for(int i=1;i<=n;++i)
{
    while(h<t&&slope(q[h],q[h+1])<dis[i]) h++;
    f[i]=f[q[h]]+dis[i]*(p[i]-p[q[h]])-(s[i]-s[q[h]])+c[i];
    while(h<t&&slope(q[t],i)<slope(q[t],q[t-1])) t--;
    q[++t]=i;
}

以上是关于斜率优化的主要内容,如果未能解决你的问题,请参考以下文章

UVALive 4726 Average ——(斜率优化DP)

3156: 防御准备(斜率优化)

hdu 3480 Division(斜率优化)

hdu 3507 Print Article(斜率优化)

bzoj 4709 [ Jsoi 2011 ] 柠檬 ——斜率优化DP

hdu 1300 Pearls(线性dp/斜率优化)