bzoj2442&&codevs4654 单调队列优化dp

Posted 友人A

tags:

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

这道题也是一道单调队列 很明显满足各种性质 f【i】表示i不选前面k-1个都选的最小损失 维护的是个单增队列 q【head】是队列最小值 代码十分简介 注意longlong就okay

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define inf 99999999999999LL
using namespace std;
const int M=100007;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<0||c>9){if(c==-) f=-1; c=getchar();}
    while(c>=0&&c<=9){ans=ans*10+(c-0); c=getchar();}
    return ans*f;
}
LL ans,mn=inf,f[M];
int w[M],head,tail,k,n;
struct node{int pos; LL v;}q[M];f
int main()
{
    n=read(); k=read();
    for(int i=1;i<=n;i++) w[i]=read(),ans+=w[i];
    for(int i=1;i<=n;i++){
        f[i]=q[head].v+w[i];
        while(head<=tail&&q[tail].v>f[i]) tail--;
        q[++tail].v=f[i]; q[tail].pos=i;
        while(head<=tail&&q[head].pos<i-k) head++;
    }
    for(int i=n-k;i<=n;i++) mn=min(mn,f[i]);
    printf("%lld\n",ans-mn);
    return 0;
}
View Code

 

以上是关于bzoj2442&&codevs4654 单调队列优化dp的主要内容,如果未能解决你的问题,请参考以下文章

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

Bzoj2442:修剪草坪

[BZOJ2442][Usaco2011 Open]修剪草坪

BZOJ2442: [Usaco2011 Open]修剪草坪

bzoj2442[Usaco2011 Open]修剪草坪*

[bzoj]2442 修剪草坪