BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP

时间:2022-09-02 11:54:42

BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP

题意:

N头牛,每头牛有一个权值,选择一些牛,要求连续的不能超过k个,求选择牛的权值和最大值

分析:

先考虑暴力DP,f[i] = f[j] + s[i]-s[j+1] (i-j-1<=k 1<=j<i)

意思是我们j+1不要,要j+2到i这部分

发现可以用单调队列优化一下

维护一个单调递减的单调队列,比较时用f[i]-s[i-1]比较

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100050
#define LL long long
int n,a[N],Q[N],l,r,k;
LL s[N],f[N],ans;
int main(){
scanf("%d%d",&n,&k);
int i;
for(i = 1;i <= n;i++){
scanf("%d",&a[i]);
s[i] = s[i - 1] + a[i];
}
r = 1;
for(i = 1;i <= k;i++){
f[i] = s[i];
while(l < r&& f[i] - s[i + 1] >= f[Q[r - 1]] - s[Q[r - 1] + 1]) r--;
Q[r++] = i;
ans = max(ans,f[i]);
}
for(i = k + 1;i <= n;i++){
while(l < r&& i - Q[l] - 1 > k) l++;
f[i] = f[Q[l]] - s[Q[l] + 1] + s[i];
while(l < r&& f[i] - s[i + 1] >= f[Q[r - 1]] - s[Q[r - 1] + 1]) r--;
Q[r++] = i;
ans = max(ans,f[i]);
// printf("%lld\n",f[i]);
}
printf("%lld\n",ans);
}

BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP的更多相关文章

  1. &lbrack;BZOJ2442&rsqb;&lbrack;Usaco2011 Open&rsqb;修剪草坪 dp&plus;单调队列优化

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1118  Solved: 569[Submit] ...

  2. BZOJ 2442 &lbrack;Usaco2011 Open&rsqb;修剪草坪:单调队列优化dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题意: 有n个数a[i]从左到右排成一排. 你可以任意选数,但是连续的数不能超过k个 ...

  3. bzoj 2442&colon; &lbrack;Usaco2011 Open&rsqb;修剪草坪【单调栈】

    设f[i]为i不选的最小损失,转移是f[i]=f[j]+e[i[(i-j-1<=k) 因为f是单调不降的,所以f[j]显然越靠右越好因为i-j-1<=k的限制,所以单调栈需要弹栈 #inc ...

  4. bzoj2442&lbrack;Usaco2011 Open&rsqb;修剪草坪 单调队列优化dp

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1159  Solved: 593[Submit] ...

  5. BZOJ2442&colon; &lbrack;Usaco2011 Open&rsqb;修剪草坪

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 500  Solved: 244[Submit][ ...

  6. BZOJ 2442&colon; &lbrack;Usaco2011 Open&rsqb;修剪草坪&lpar; dp &rpar;

    dp dp[ i ] 表示第 i 个不选 , 前 i 个的选择合法的最小损失 , dp[ i ] = min( dp[ j ] ) ( max( 0 , i - 1 - k ) <= j &lt ...

  7. BZOJ&lowbar;1342&lowbar;&lbrack;Baltic2007&rsqb;Sound静音问题&lowbar;单调队列

    BZOJ_1342_[Baltic2007]Sound静音问题_单调队列 题意: 给出n个数,求∑[ max{a[i]~a[i+m-1]} - min{a[i]~a[i+m-1]} <= c ] ...

  8. BZOJ&lowbar;1999&lowbar;&lbrack;Noip2007&rsqb;Core树网的核&lowbar;单调队列&plus;树形DP

    BZOJ_1999_[Noip2007]Core树网的核_单调队列+树形DP Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T ...

  9. BZOJ 2442&colon; &lbrack;Usaco2011 Open&rsqb;修剪草坪 单调队列

    Code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...

随机推荐

  1. C库函数使用与总结之字符串处理函数

    1. memcpy(拷贝内存内容) [头文件]#include <string.h> [函数原型]void *memcpy(void *dest, const void *src, siz ...

  2. jquery技巧(持续更新。。)

    (1)集合处理功能         //为索引为0,1,2的元素分别设置不同的字体颜色         $('p').each(function(i){               this.styl ...

  3. 使用PetaPoco结合注入实现业务级事务

    使用PetaPoco结合注入实现业务级事务   PetaPoco是一个轻量级ORM,我的MVC项目中使用它结合Repository模式,依靠Unity的生命周期管理对象,保证请求/线程级别的数据上下文 ...

  4. java笔记----property文件读写

    package com.test.property; import java.io.BufferedInputStream; import java.io.File; import java.io.F ...

  5. python内置的高效好用各种库

    二分查找,import bisect 堆排序,import heapq 哈希算法,import hashlib 压缩,lzma 图形处理,PIL 处理xml文件,PyXML 多媒体操作,PyMedia ...

  6. mysql的一些指令

    说起来mysql,mysql其实是特别简单操作的数据库.它有一下几方面的特点,亦或者是说优点,1,支持多语言:2.移植性比较好:3,我觉得最重要的一点就是它是开源的,因为开源,所以使用广泛,4.效率比 ...

  7. &lbrack;HEOI2013&rsqb;SAO ——计数问题

    题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...

  8. PHP内核-环境搭建&lpar;一&rpar;

    难得闲下来,发现自己没有系统的学习过PHP内核,希望我能够慢慢啃下PHP内核书籍,无论是抄袭也好,码字也好,一步一个脚印走下去. 学习来源:http://www.php-internals.com/b ...

  9. C&num;获取文件夹及文件的大小与占用空间的方法

    本文详细介绍了利用C#实现根据路径,计算这个路径所占用的磁盘空间的方法 . 网上有很多资料都是获取文件夹/文件的大小的.对于占用空间的很少有完整的代码.这里介绍实现这一功能的完整代码,供大家参考一下. ...

  10. 第3章 文件I&sol;O(1)&lowbar;标准C的I&sol;O

    1. 标准C的I/O和FILE结构体 1.1 标准C的I/O库函数 (1)char *fgets( char *string, int n, FILE *stream );//从流中获取字符串 (2) ...