AC日记——[HNOI2008]玩具装箱toy bzoj 1010

Posted Only U - IU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC日记——[HNOI2008]玩具装箱toy bzoj 1010相关的知识,希望对你有一定的参考价值。

1010

 

思路:

  斜率优化DP;

  跪烂大佬

 

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 50005
#define ll long long
ll que[maxn],sum[maxn],dp[maxn],n,l,ai[maxn],a;
inline void in(ll &now)
{
    char Cget=getchar();now=0;
    while(Cget>9||Cget<0)Cget=getchar();
    while(Cget>=0&&Cget<=9)
    {
        now=now*10+Cget-0;
        Cget=getchar();
    }
}
ll G(ll now)
{
    return sum[now]+now;
}
ll Y(ll x,ll y)
{
    return dp[x]+pow(G(x)+a,2)-dp[y]-pow(G(y)+a,2);
}
ll X(ll x,ll y)
{
    return 2*(G(x)-G(y));
}
int main()
{
    in(n),in(l),a=l+1;ll h=0,tail=0;
    for(ll i=1;i<=n;i++) in(ai[i]),sum[i]=sum[i-1]+ai[i];
    for(ll i=1;i<=n;i++)
    {
        while(h<tail&&Y(que[h+1],que[h])<=G(i)*X(que[h+1],que[h])) ++h;
        dp[i]=dp[que[h]]+(G(i)-G(que[h])-a)*(G(i)-G(que[h])-a);
        while(h<tail&&Y(i,que[tail])*X(que[tail],que[tail-1])<=Y(que[tail],que[tail-1])*X(i,que[tail])) --tail;
        que[++tail]=i;
    }
    cout<<dp[n];
    return 0;
}

 

以上是关于AC日记——[HNOI2008]玩具装箱toy bzoj 1010的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP

[HNOI2008]玩具装箱toy

[BZOJ1010][HNOI2008]玩具装箱toy

1010: [HNOI2008]玩具装箱toy(斜率优化)

bzoj1010[HNOI2008]玩具装箱toy

bzoj1010 [HNOI2008]玩具装箱toy