bzoj2442

Posted 宣毅鸣

tags:

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

题解:

单调队列+dp

f[i]=max(f[j-1]+sum[i]-sum[j])

然后维护f[j-1]-sum[j]单调性

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200005;
int n,m,a[N],p[N];
ll sum[N],q[N],f[N];
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)scanf("%d",&a[i]);
    for (int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];
    f[1]=a[1];p[2]=1;q[2]=-a[1];
    int l=1,r=2;
     for (int i=2;i<=n;i++)
     {
         if (p[l]+m<i)l++;
         f[i]=sum[i]+q[l];
         while (l<=r&&q[r]<=f[i-1]-sum[i])r--;
         p[++r]=i;q[r]=f[i-1]-sum[i];
     }
    printf("%lld",f[n]); 
}

 

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

BZOJ2442修建草坪(动态规划,单调队列)

Bzoj2442:修剪草坪

[BZOJ2442][Usaco2011 Open]修剪草坪

BZOJ2442: [Usaco2011 Open]修剪草坪

bzoj2442[Usaco2011 Open]修剪草坪*

[bzoj]2442 修剪草坪